An interrupt returns to the position the program was at when it was called . If you return elsewhere you are likely to have problems caused by incompleted routines . Not good practice and can’t see why you would want to do that.
You could set a flag in the interrupt service routine and check for that on exit , and not preform any further actions in loop ( by checking if the flag is set) until you again reach the top of loop , where you reset the flag.
No idea what’s wrong with the rest of it... looks a bit odd tho