Coming back a bit late to the thread I started a month ago...
Basically, because `multibyte` is on by default, the *`setopt` commands behave as if there were instead an option with the inverted meaning named `nomultibyte`, and it is that string rather than `multibyte` which shows up in the output of one or the other. (I suppose one difference between the actual situation and the postulated `nomultibyte` option is that the inversion is `multibyte` rather than *`nonomultibyte`.)
Also, I was misinterpreting the output of `unsetopt`; the presence of `nomultibyte` in its output means that option is _not_ set, or in other words, the `multibyte` option _is_ set.
Thanks for the suggestions for alternative ways to display the options. As far as I can tell, `kshoptionprint` just makes `setopt` produce the same output as `set -o`; I'm happy to just use `set -o` in that case. I used ksh for a long time. :)