Some further informations.
RequestLogger.requestTime is called at the end of RequestCycle.onInternalDetach. requestTime calls some methods of RequestLogger, including method getListenerString. One of the first instructions of this method is ListenerInterfaceRequestHandler.getPageClass() and this is causes an indirect call to PageAccessSynchronizer.getPage(id). If you need I can post the whole call stack.
Possible solution (not tested yet!):
Before throwing PageExpiredException call IPageManager.commitRequest (easy to implement, riskless, and without overhead)
Obviously I need your opinion