Fixed (hacked around) in GIT hash e72f492. Basically select() no longer works on newer systems (could be due to a malfunction of some kind, but it doesn't really matter), so instead of busywaiting on select(), newer systems will busywait on read().
I don't know how much this information helps, but I tested both fish and sftp between two Trinity systems, one real and one virtual. Both systems using OpenSSH 5.5p1 and OpenSSL 0.9.8t.
Using sftp worked both ways all the time without any event. Connecting with fish from the virtual system to the real system was the same.
When trying to connect with fish from the real system to the virtual I always received the infamous "protocol died unexpectedly error." When I deleted the ksycoca cache and set KDE_FORK_SLAVES=true, then fish always connected.
In hindsight that makes no sense because the environment variable was changed some time ago to TDE_FORK_SLAVES. I'm guessing the real issue is something in the ksycoca cache causes problems for fish.
I'll test again and add more information as possible.
Darrell