A: 

From what I can tell, this is happening when the internal connection object is being created in SqlConnection (you would get this using enterprise library or not, I believe).

There are two things I would check. First is the obvious, are you disposing of all of your connections properly? Even though you are using connection pooling, you still must call Dispose on all of your connections when you are done using them so they are returned to the pool. If not, you could be looking at a starvation issue.

If you are disposing of your connections properly, then I would look at the connection between that machine and the SQL Server, it would seem maybe you have connection problem there.

casperOne
Just a side note: Calling .Close() on the connection implicitly calls .Dispose(), so if he's using .Close(), he's okay.
HardCode
@HardCode: Yes, but there is no indication of that anywhere. Also, that's an implementation detail, so Dispose should be preferred over Close.
casperOne
OK, I'll dive into the code and check this, but I thought that when using Enterprise library, it opens and closes connections for you. IE, our code sends SQL command to the enterprise library functions, but doesn't open the connection. Enterprise library does all that for us.
Andrew M
@Andrew M: It does, but you can still get at the connection and use it yourself if you want. I can't see your code, so I can't tell if you are doing that or not.
casperOne
OK, I'll dive into the code and see what's going on. I'll post up relevant chunks if I can. TBC. Thanks
Andrew M
Sorry for abandoning this question, I can't remember the outcome of this problem (It involved raising several tickets with Microsoft, and was handed off to other people to solve) so I've accepted this answer. I've since moved to a new job (no longer using .Net 1.1 :) so don't have access to the source any more.
Andrew M