I think there is a way to set the ps cache size to 0. This might show if it is a ps cache problem or the connection pool that is thread-unsafe.
You could also try using the jca support from 2.4.4 and wrapping your driver. While equally likely to have threading errors, I find the code somewhat easier to understand.
We found that. We added some debugging info (printing out the addr of each ps etc) and seems like the JDBC driver is caching the underlying prepared statements itself. JBoss gives us a different ps each time.
I am going to find out if there is some way to turn this off. I think it is broken...