I'll leave my comments about the pool code to myself.
In this case I believe the GCMinIdleTime is biting you. The "feature" in question is "Garbage Collection" which in this case means returning connections that have been checked out too long back into the pool. I've yet to think of any circumstance in which this could possibly be appropriate behavior...
Anyway try setting GCMinIdleTime to Long.MAX_VALUE or so. You might need something a little smaller to avoid overflow.. maybe max_value/2
David, thanks. As always, your assistance is greatly appreciated.