Try changing the transfer_timeout setting in settings.php. I know I set that to 0 half a year ago or so to let people download through my proxies.
If I had to guess I'd say a curl upgrade, or some other component being used changed the behavior of how that worked.
I've been doing some testing and I moved to a setup involving squid in front of lighttpd and I still saw the issues. I changed the transfer_timeout and it seems to be working better since yesterday afternoon.
It looks like there may be a bug somewhere.
Wait, take that back. I just removed squid from the picture and I'm getting a lot of hung children.
I think squid timeout settings helped.
Edit: I'm not sure if that was the case. I looked again and the 80 hung children were all from one IP. I think a misconfiguration client or a bot was causing what I was seeing, as it has cleared up now. I'm going to have to let this run a lot longer before I can say anything for sure.
Also set your apache KeepAlive Timeout to 3 or 5 seconds.
You might have it at 300 seconds... Just a heads up. That means the connection and http process/max client will lay idle for 5 minutes after the person stops using it.