I got this awnser from the mailing lists.
Guice perstist has a feature which is rather unusual und causes some problems. I think you might just be hitting it
When you request an entity manager outside of a unit of work guice persist will implicitly start the unit of work for you. Unfortunately the isActive() on UnitOfWork is package private. And you cannot test if a unit of work is active.
There are two ways to explicitly start and end a unit of work. You can use the UnitOfWork and the methods begin() and end(). Also the @Transactional annotation starts a unit of work. @Transactional will also end the unit of work if and only if it started it.
It is best practice to only obtain an entity manager within a @Transactional method.
I can only conclude that the @Transaction annotation isn't of the same maturity level as the one in spring. On the other hand getting the entity manager within an @Transactional manager via a provider doesn't really solve this problem.
Since we are moving to production really soon, I have switched back to spring, which is a shame, but was the only sensible solution to manage our deadline.