I dont know your entire text rendering code.
When referring "Lazarus" then that is SynEdit, or text on buttons, menus...?
It is too long ago to remember how exactly SynEdit is setting up the fonts, and canvas, etc....
But about the "cut off"
SynEdit has code to "force" each char on the desired pos. (search ETO in SynEdit)
On Windows that is part of the OS API, on other platform the LCL emulates that by outputing each char on its own. (not the best, and bad for eastern/script languages / so it is only used if really needed)
SynEdit detects sub-pixel width of a font.
It measures several individual chars, and checks they all have the same width (as should in monospace).
Then it measures a string like "aaaaaa". That should be exactly 6 times as wide. But for subpixel it will not be.