Looking at the testsuite for EntityManager tests the EntityEntryContext will not be cleared after a Transaction.commit().
Why should the commit clear the EntityManager? There is a clear() method for that.
For instance, you can span an EntityManager over multiple successive JPA transactions.
Am I expected to re-open EntityManager occasionally to make this application stable?
Since you are running a batch processing task, the lifespan of an EnitityManager should span on one or more batches, but not for the entire duration of the batch processing task. You can either flush-clear-commit or just create a new EntityManager after processing every N items.
For more details about the best way to do batch processing with JPA and Hibernate, check out this article.