Это может быть связано с проблемами с точностью с плавающей запятой.
Вообще говоря, каждая арифметическая операция с плавающей запятой вносит в результат ошибку, по крайней мере, равную точности станка (то есть наименьшему числу, которое при добавлении к 1,0 дает результат с плавающей запятой, отличный от 1,0). Эта ошибка известна как ошибка округления. Ошибки округления кумулятивны и иногда зависят от порядка операций.
Вместо
double spaceAdvance = ((availableSize.Width - glyphs.DesiredSize.Width)
/ spaceCount + spaceWidth) / glyphs.FontRenderingEmSize * 100;
попробуйте переместить умножение на передний план, т.е.
double spaceAdvance = 100.0 * ((availableSize.Width - glyphs.DesiredSize.Width)
/ spaceCount + spaceWidth) / glyphs.FontRenderingEmSize;
Кроме того, вы также можете попробовать
double spaceAdvance = (100.0 * (availableSize.Width - glyphs.DesiredSize.Width)
/ spaceCount + 100.0 * spaceWidth) / glyphs.FontRenderingEmSize;