Its not an issue with your code, its an issue with the way print preview is implemented itself. As the screen metrics (resolution/ dpi etc) may/are not an exact match to the target print device, especially when zooming in on the content, print preview has to do an estimation when converting from the requested font size of the target DC to the screen dpi/zoom metric DC used to display the preview. This causes the generated font size to vary slightly at various zoom levels. To see this when you select a font into a CPreviewDC you should see that is does a lot of extra work converting the font from the outputDC to the previewDC format, its at thispoint that the scaling issues occur.
If you vote me down, my score will only get lower