A resposta para este problema foi que eu precisava adicionar um comando wait no final do script expect. Como é mostrado na pergunta, estava funcionando, mas estava enviando a senha e, em seguida, imediatamente matando o processo. A adição de espera aguarda a conclusão do processo de rsync.
Versão corrigida:
expect -d -c "spawn rsync -e ssh -<other_params>" -c "expect password:" -c "send mypass\r" -c "wait"