I talked to the sysadmin and he said the network has a short TCP timeout so there's 2 C3P0 properties I'm looking at to get around this:
maxIdleTime & idleConnectionTestPeriod. I could use the maxIdleTime to just say if the connection is idle for 15 minutes, then discard it. I think that would eliminate the problem, but I'd rather not get rid of them in case of a surge of users after some dead time and there's no connections available. So that's why I was looking at the idleConnectionTestPeriod, to test the connections every 10 minutes or so, so they won't break and the Exception won't be thrown. This is all theoretical until I see if the exception happens again or not.