I had a similar problem some weeks ago, so I'll tell you what I did:
1) Check that your PK class is well written and so "equals" and "hashCode" methods work as they should.
2) If you are working in your transaction with several instances of entity EJBs (for example, returned from a query) check that the datasource's connection pool size is large enough to support all the EJB instances. Increasing the default value I was able to get around that exception.
Hope this can be useful for you.