O status de saída é de 8 bits (embora a maioria dos shells (exceção do ksh93) o truncará para 7 bits, já que usam o bit 8 para processos sinalizados), então ele só funcionará se o pid estiver entre 0 e 127. Get o pid de um pipe em vez do status de saída:
SSH_PID=$(
expect <<EOD
...
spawn -noecho ssh ...
puts [exp_pid]
...
EOF
)