I'm seeing this behavior too, odd. I don't see anything wrong with your code right off hand (hey, just have to check before filing a bug ;)) and looking at the IL for the RichText.set_ZoomFactor (and a subsequent call to a private method) doesn't show any calculation bugs either. I'm guessing this is actually a problem with the Rich Edit common control somewhere in the EM_SETZOOM message handler. So, googling for "Rich Edit" EM_SETZOOM[^] shows you're not the only one! Feel free to report, though. Maybe someone hasn't yet. Never know.
-----BEGIN GEEK CODE BLOCK----- Version: 3.21 GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++ -----END GEEK CODE BLOCK-----