Возможно, вы выполняете преобразование по центру, но TranslateTransform перемещает центр на то же расстояние, что и любая другая точка. Это все равно что взять лист бумаги и переместить его на дюйм влево. Неважно, где вы берете его.
Попробуйте это:
wp.Render(textBlock1, new TranslateTransform() {Y = topMargin - textBlock1.Height / 2, X = imgWidth / 2 - textBlock1.Width / 2});
Вы можете забыть о RenderTransformOrigin, если вы не используете вращение / масштабирование / матрицы и т. Д.