Now, I have implemented the "delayed refresh" idea without the assistance of xepdmgr.

IMHO, adding the eink update code in refreshWindow() on FBreader.cpp is preferred, because only the binary FBReader is affected, other zlcore, zltext and zlui will stay the same.
The trade-off is to sacrifice fast typing refresh provided by xepdmgr.
Added:
The result of preloading without xepdmgr is not so satisfactory. I got redundant screen refresh sometimes. Maybe it the fault of my code. For now, the best reslut is the combination of dmDisplay() and xepdmgr.