Hey Tony,
What you suggested can be generalized in the following manner for drafting views and legends:
1-Get the desired location of label and line in the view's coordinate system. For this, you should consider the view scale and margins when the view is placed on a sheet.
2-Empty the view, and only create a temp line at the presumed location of the label line.
3-Create the viewport; presumably, the label will be at the desired location* based on the default behavior of view placement in Revit.
4. Recreate the things that were removed in step 2, and get rid of that temporary line. The label will remain at its previous location.
* There is a catch: for certain viewport types, the api behavior can be different from when a user places a view on a sheet manually (surprise!). So even in this case, the outline will be closed to that of the desired label outline, but still a little different. To alleviate, you can go one step further between steps 3 and 4 above as follows:
3a-Obtain the label outline for the newly created viewport and by comparison to the desired outline, come up with a "correction" for temp line geometry (location and length), again, considering scales and margins.
3b-If the correction is significant:
3b-i- Remove the viewport, remove the temp line, create another temp line with the correction obtained in 3a.
3b-ii- Create another viewport - hopefully this time, the label will be at desired location, and you can proceed to step 4.
This sounds very messy as you suggested, but works as of Revit 2020.
Hope this helps.