I tested the cable going from my computer to the router, and it turned out wires 6 and 7 were broken. After installing a new CAT5e cable, the problem is solved.
With auto negotiation enabled on my Windows 7 PC (which has built in gigabit ethernet) - plugged into a DGND3300 netgear 10/100 router - speeds can be as low as 3MB/s (24Mb/s), and very erratic, over Samba to a Linux machine (which also has a gigabit NIC, with auto-negotiation enabled).
With "100Mb Full duplex" explicitly set on my PC's NIC, I get pretty much the full 100Mb.
On a Windows 7 netbook with a 10/100 NIC and auto negotiation enabled, I also get the full 100Mb over samba to the Linux box (of course wireless is a different story though).
Could this be a driver issue or what? Obviously it's not affecting me because I know how to work around it, but it would be nice to know the "root cause" so to speak. Is there a Windows tool comparable to ethtool in Linux?