It's pretty weird how it connects with different user agent though, does masquerading as different UA provide different results?
There are two possibilities that come to mind, they are either running multiple implementation and monitoring their behavior and the bitcoin network through each of those. Or some of them may be trying to both test and avoid user-agent banning (that is where your node disconnects the node that has a certain U.A. right away).
I think the full banscore calculation system is found here[2]. Most of the criteria seems to be related to sending invalid messages which increases the banscore.
I'm currently postponing looking at source code, thanks for the link though.