Tivemos o mesmo problema em um sistema de produção com Tomcat6+Hibernate+MySQL (e Spring em nosso caso) e a única solução confiável que encontramos foi definir o tempo limite de conexão para um valor grande na configuração do MySQL. Não consigo me lembrar dos detalhes, mas acredito que houve um problema com o commons-pool subjacente code quando verifica se o recurso em pool é válido.
Outra possibilidade que não tentamos foi usar um mecanismo alternativo de pool de conexão diferente do DBCP. O próximo a tentar seria C3PO