The problem seemed to be that Npgsql was using one key to get a connection to pool and another one to return it back.
The issue is that although it is wrong, those two values were supposed to be the same.
You can see here and here bug reports about it.
Well, the fix is already on cvs, so if you were using Npgsql on Mono, you should definitely give it a try so you can see if your code works ok.
Sorry for this problem.
Later I will bring a full analysis of what can be the problem.