It seems to be something related to caching of glyphs.
If a glyph is cached, you don't get floating point precision.
This seems strange since the position where the glyph is going to be
painted, should have nothing to do with the caching of it.
See also this "thread":
Most interesting part from that thread might be this:
If I comment out line 3195 (or thereabout) in qpaintengine_raster.cpp, which looks like this:
"if (!drawCachedGlyphs(glyphs.size(), glyphs.constData(), positions.constData(), fontEngine))"
drawText works properly.
QPainter::drawGlyphRun has the same problem.