@JonB looks like you're right...I was doing something incorrectly, though now I'm not sure what.

If I simply take the widget.bounds() and ui.convert_rect() to the ScrollView, I get a valid rectangle in the ScrollView coordinate space. So all good.
Thanks.