Passing exact bounding rectangle from GdipMeasureString() to GdipDrawString() may currently result in nothing being rendered because gdip_format_string decides the string does not fit in the rectangle. The effectively considered width is a result of truncation of float rect->Width. Even without any transform or scaling in play, the float math performed on margin and width in GdipDrawString() is enough to introduce rounding error so that the truncation rounds to smaller integer while float value is very close to the next one.
As tests shows, Windows seems to do some rounding on the value. I bisected the epsilon value more precisely locally and it looks like it is very close to 0.005. The result is a bit biased with the current font size in test (probably due to some extra math and rounding on the way) but doubling font size yields 0.005 almost exactly.
Fixes text rendering in a game which randomly skips characters (in fact, most of them).