Thanks all, as usual!
The wait for the table view to become valid can be very short, as short as 0.01 seconds, apparently. Unfortunately there's no simple way to be notified when a UIView becomes visible (anyone have a generic notification-y way of doing that?), and even then I don't know that just being visible for a table view is the same as it having valid rows/indices.
Also, to scroll to a specific row turns out to be very easy, once you have a table view with valid indexes displayed:
UITableViewScrollPositionMiddle = 2
tvobjc = self.tableview.objc_instance
NSIndexPath = objc_util.ObjCClass("NSIndexPath")
nsindex = NSIndexPath.indexPathForRow_inSection_(index,0)
tvobjc.scrollToRowAtIndexPath_atScrollPosition_animated_(nsindex, UITableViewScrollPositionMiddle, True)
Works great, set that last parameter to False to scroll without animation.