Sorry for the slow response, I expected to be auto subscribed to my own thread but wasnt.
Anyway to answer some of the questions:-
proxy_read_timeout 120 is whats triggering the timeout
The OS is FreeBSD running 8-stable from just before Christmas so a recent 8.2-PRERELEASE, which should have any needed OS fixes in. FS is ZFS and while it does have some performance penalties (dual buffers and not zero copy) for sendfile it otherwise works fine for streaming at least so I don't think that's the source atm.
Going through the code I couldn't figure our how any retry would be triggered / attempted. Quite happy to throw some debugging to try and identify the problem if someone can point me in the right direction.
Don't think its possible to remove passenger out the equation as that's the only way I've been able to trigger this thus far.