Reading from the screen can't be a problem specific to Ndoom - Both boot2 and the OS do it during initialization, and so does Ndless ploaderhook (line 65: "memcpy(savedscr, SCREEN_BASE_ADDRESS, SCREEN_BYTES_SIZE);"), but Ndoom doesn't do it.
I think the problem is related to the memory access size. I've seen the bug happen in my own programs when using byte-sized accesses, but never when using word-sized accesses.