Depois de mais experimentos com strace (obrigado pelo comentário de womble), descobri que meu processo ssh recusa o SIGTTIN e isso causa o problema que enfrentei. O primeiro link do google para o "ssh SIGTTIN" esclarece a situação: link seção "7.4.5.6. Plano de fundo de um comando remoto":
ssh provides the -n command-line option to get around this problem. It redirects standard input to come from /dev/null, which prevents ssh from blocking for input.