Ummh what are the file sizes in the logs?
Are they the bytes as the actual files?
So all the files have a http status of 200. In that case IIS thinks the they have sent the last packet to the client. If there are network/proxy/firewall issues between IIS and the client machine you could see additional win32 errors (hence why the win32 column is important).
Can you eliminate an other infrastructure like network/proxy/firewall/load balancer/etc
Often you will see 64 errors indicting a network failure. The client may or may not have a completed file.
You coudl also get errors like this with code and double post bugs http://ddkonline.blogspot.com/2008/02/aspnet-double-postback-bug-strikes.html
or even refreshing repeatly could cause errors like this.
So you need to just look at the file and no code attached to it.
I have not recalled seeing the win-32 995 error before.
995: The I/O operation has been aborted because of either a thread exit or
an application request. ERROR_OPERATION_ABORTED
Is it possible to check this on the LAN where the server is? e.g.Another machine in the Internet infrastructure? As could help in narrowing down problems (network/firewall/proxy/routing/etc) to the client machine?
Is there anything in the HTTP.sys error logs? This could indict another error.
AFAIK a http 200 status indicts that IIS has sent the last packet but it does not mean that it left the machine it could be stuck/error in the TCP/IP stack or network card. Maybe try and update your network card drivers?
Maybe also dig deeper and look at the actual packets going in and out of the webserver using a network analyser tool like wireshark or netmon.
Hope that helps