I've had just too hard a time untangling my threaded function knots, so I settled for a simpler (hacky) fix. I have a global I set right before my call to RunPopupMenu, and clear it after the user makes a selection.
Over in my threaded function scheduler, I check for that flag before proceeding.