Okay, a good night's sleep does wonders for your brain

.
Yes, this is perfectly normal: a rotation doesn't actually rotate the framebuffer's *content*. It's still the same block of memory, it just gets addressed differently.
Some kernels *may* just zero the full region after a rotation to hide some of that away, but that doesn't seem to be the case on a Kindle.
So, essentially, this works because eInk, where what's on the screen can be completely different than what's on the framebuffer. It works because each and every time, you're refreshing *just* the right region

.
As a quick test, if you display an full-screen image, and just *invert* the rotation, that "works", because the memory layout is identical (a scanline is still the same length). But as soon as you change the layout, things start getting funky

.