One other repro case is if the underlying database connection is closed (listener bounced for example) from the database end, calling Connection.close() will result in:
java.sql.SQLException: Attempted to use Connection after closed() was called.
The connection will stay in the the active pool, using up MaxActive. We need to have it drop off from the pool if it's closed. This is important as we want our application to automatically recover from a database failover and still have a accurate connection count.