there are a number of factors that have a role in the final outcome, eg integer sizes, constant rounding between calculations the fact that vector fonts are not very size stable by their nature even a device's drivers might add its own calculating errors to the mix. IF you want to see if there is anything you can do fix it then take a look on the unit lr_Class specifically the TfrCustomMemoView.CalcHeight and TfrCustomMemoView.WrapMemo methods. You will find code like y := Round(y* ScaleY)+OffsY; or InternalGapY := wy2 div 2 + 1 + FGapY; etc.
I wasn't able to test your attached report it raises an error when loading the file that isn't very helpful and I'd rather not debug it at this time, but a quick test that I made produces acceptable results in my windows 7 with arial font. I have no idea if it is the font, the device (printer, screen etc) or the constant rounding but as far as I can tell this is expected behaviour in all the vector fonts and preview/print procedures. they are not that accurate.