Thank you, it indeed seems to be related
Adding:
@Pool(value=PoolDefaults.POOL_IMPLEMENTATION_STRICTMAX,maxSize=5000,timeout=10000)
to the StateLessBeans that are started from the timers seems to be helping.
Now with this I've probably discovered the root cause of our problem, someone added "instance" variables to a few StateLessBeans and they are now becoming NULL between method calls (as the are "supposed" to). That was not the case before I added the @Pool annotation.