Sorry for the delay on getting back on this - and thanks so far to jsb and albert for your thoughts.
None of those things work though I’m afraid. Over last few weeks I’ve been pulling my hair out (and I don’t have much to begin with) trying to get to the bottom of this before coming back here.
What I have done is, via xdebug, prove that control DOES pass back to the calling app (when I force a reload, in various ways) and it does execute statements that update its own fields. However, those updated values do NOT appear changed on the screen. It’s almost like the calling app has frozen at the point it refreshes the screen with those values. It hasn’t frozen at all though as everything works as you would expect - it’s just not up to date. Next time I call that app the updated values are all correct - as does hitting a Refresh button I’ve added that uses sc_exit(sel) and works fine that way (so what I want is to be able to cause that to happen in code, but running sc-exit etc does not seem to work for this)
Sooooo frustrating.
Now, it is possible that I am “breaking” something as I have been experimenting with using an alternative to the SC file uploader (using a JS plugin) - and it’s when that uploader (called as the aforementioned modal app) closes that I want the calling app to refresh with a field showing the name of the uploaded file (as well as update the DB with that name). The DB update works fine.
NOTE: I was planning to document doing this on here separately as a tutorial on how to use a JS plugin like that (as I had to work it out the hard way and wished someone had done something similar) - if I ever get this sorted. I have it all working, aside from 2 final hurdles. This one, and getting it working in my Prod environment (may well be another thread on here when I get to that ha ha). Also, my original description used stuff like “awaiting approval” etc which were just simple terms as I thought describing an analogy of what I was doing would be simpler than explaining the nuts and bolts (probably not in hindsight). 
Now - I could just give up, leave it, and have a nasty message telling the user to hit the refresh button (horrible, but may end up that way if I cannot resolve this), but I would much prefer the elegant way (and I cannot believe it’s not achievable, unless there is a bug, or I have broken a link or something by how I’m integrating a JS plugin?