Just a thought but have you hard-coded speed and duplex all the way through? Don't trust auto-negotiation.
Sorry for the slow post -- trying to get caught up on my list reading after a hectic week. :-)
My understanding from the IEEE 802.3u specs is that the key to the "hard code vs auto-negotiate" debate boils down to: with the auto setting of switch & NIC ports, SPEED can be DETECTED (based on the speed of link pulses), DUPLEX must be actively NEGOTIATED. IOW, if one end has duplex hard coded, then the other end has nothing to negotiate with and must DEFAULT TO HALF DUPLEX.
This results in 3 compatible combinations:
1) Leave both ends at auto.
2) If you are in a shop that is very meticulous about duplex settings on both switches AND servers (hard to do in most large organizations because different groups usually manage servers and switches), then you can hard both ends to full duplex.
3) If you are in a shop where duplex misconfigurations are are common (or left at the default) and going auto/auto everywhere is not desirable, its best to hard-code to HALF duplex -- that way if the other end is left at auto things still work.
So, while hard coding both ends to 100/Full provides maximum throughput, forgetting to hard code one of the two ends will always result in a duplex mismatch (and EXTREMELY low throughput).
HTH, Kennedy