It’s getting late and I’m probably doing something stupid, but the 565 mode packing seems really weird.
My color struct is { uint8_t r, g, b, unused; };
I have the BGR register set to 0x48, as this is necessary to get the correct color mappings in 18 and 244 bpp modes, where I just pass the first three bytes of the struct into the spi hardware.
8 color mode also works fine; the bits are packed (binary) 00RGBRGB.
But as far as I can tell, 565 mode is something like (binary) BBBBBRRRRRRGGGGG unless I have some sort of offsetting bug in my code.