LFS really likes a 100 fps framerate on a 100Hz refresh rate for optimal smoothness (though I don't recall which gave the best resuts: locked to 100 fps with vsync off, or vsync enabled). Varying either doesn't make sense at the moment.
Technical explanation: For some characters, the Windows function GetCharWidth32W returns a width that is different from the width of the text drawn by DrawTextW, which is what I call to draw a single unicode character for a cache texture. I don't know why there is a width discrepancy but I've changed it to get the width by calling DrawTextW with the DT_CALCRECT option instead of GetCharWidth32W. It makes some sense because I'm now getting the width from the same function that is used to draw the text. This seems to work fine. Wide characters are still truncated on the right because these characters are copied into fixed size slots for efficiency as unicode characters need to appear and disappear on the cache textures and the slots are re-used. This is made a lot easier by all characters using the same size slot.
I am considering 4K displays now and the updated fonts do look better in 4K than they did before. They are generated using slightly higher resolution and more accurately. I don't have my own 4K display but I can use a special 4K screenshot mode so I can check how it looks by zooming in using a separate program.