This doesn't seem right to me (though, neither does the code we have now for NoWrap).
If I understand correctly, the current behavior for functions other than GdipMeasureString is that we will end the line as if it had wrapped and then stop drawing the string right there. This behavior makes no sense to me, but for all I know it could be correct.
I think you are changing it so that it draws the last character that fits and stops drawing the string. I would expect that it should still draw a character that partially fits, and possibly the rest of the line as well.
I think we will need a test program that draws the string and measurement rectangles to understand how this is supposed to work and verify the correctness of your patch.
Fortunately, I already have one that I can easily modify, so I'll get right to it.