I can set the position using TranslateTransform but the start position is always 0. This makes it very difficult to do absolute positioning if I can't at least get the absolute start position. I suppose I need access to Canvas.Left and Canvas.Top from TextBlock, but the API does not allow that.

I must add that the XAML code is not handwritten so I can't manually modify it, as that is too much work. It is automatically generated by a conversion form Inkscape SVG to XAML using ViewerSVG.

To get a meaningful value for that function you should wait until the xaml layout is finished, you can do that in the Loaded event, or call element.UpdateLayout().
Once layout is done, an element can't return 0,0 if its bounding box is not positioned in the top-left corner of the screen.