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.