Originally Posted by kovidgoyal
UTF-8 does not use null bytes. That file is almost certainly being processed by calibre as utf-16
Thanks. That makes sense, then. AFAICT, it is perfect UTF-16 now, but I just wasn't sure what happened when Calibre saw all the UTF-8 encoding declarations in a UTF-16 encoded file. It now displays correctly in Calibre's viewer, and in all my various Android ebook readers.
I'm just guessing, but I suspect that they see the leading 0xFF 0xFE bytes in the file, then the null bytes and say: "Aha! UTF-16", despite the declarations of UTF-8.