0c97aa9e141f5:main.cpp:2388
// Be shy and don't send version until we hear
if (pfrom->fInbound)
pfrom->PushVersion();
Shouldn't this be !pfrom->fInbound ?
Outbound connections should speak first, but this code makes inbound connections speak first.
I admit I don't really know what's going on since the following is present too:
0c97aa9e141f5:net.h:567
// Be shy and don't send version until we hear
if (!fInbound)
PushVersion();
Which looks more correct to me.