Ещё хинт: в простых случаях, можно MeasureString не вызывать а воспользоваться свойством Height самого шрифта.
Из примера выше вот это:
var iOneLineHeight = g.MeasureString("Z", fnt, wrapWidth, sfFmt).Height;
эквивалентно этому:
var iOneLineHeight = fnt.Height;
Вопрос ещё такой - вы где всё это отрисовываете? WPF, Winforms? Системный оконный менеджер для этих целей сам может всё рассчитать. Float Container с ограничением по длине, а внутри набор Label с Autosize, в принципе, избавят вас от этих мучений.
Имейте так же в виду, что MeasureString не гарантирует вам точных замеров ширины текста. Чтобы всё рассчитать точно, надо пользоваться MeasureCharacterRanges