If you set debug on, and dev on in your config.tcl, your log should fill with copious obscure details of what is going on, including hex dumps of most i/o in and out of your box.
I use that to try and pin down exactly what the browser and server are doing. That's how I've picked up on the oddities where IE can retry a POST, without the posted data, and even turn a POST into a GET.
I don't have a solution right now. Since IE has something like a gazillion market share, I obviously want to find solution and/or a work around. I guess I hear you saying the meta refresh will work. Ugly as that is, it's probably the way to go for now.
Alternatively, I have some strategies involving more development of nsunix: 1) merge nsunix with nssock, that is, let nssock "accept" connections on a unix domain socket and after they are accepted handle everything else in a standard nssock sort of way, and 2) implement the nssock graceful closewait in nsvhr and nsunix as needed. I'd be happy to help you attempt either of these. My recommendation, if it works, is to do the meta refresh. I think it's ugly too, but scanning the forums at aD and OpenACS, there is a long history of folks using that technique due to IE returnredirect oddities.