Running inside CMT, GlobalJpaTimerJobInstance assumes transaction managment at command service level, disposing the runtime engine before transaction completion. Due to ContainerManagedTransactionManger the session is registered to be disposed after transaction ends. This raises an exception because the session was previously disposed.
After discussion in user forums Maciej proposes a solution extending GlobalSchedulerService to decide if the transaction is managed by SchedulerService or not.
Discussion here: GlobalTimerService and DisposableCommandService running in CMT