I can see how it could get trapped after the sleep and before the x comparison if x = 3. It's probably never been an issue because it has never taken longer than 3 seconds to light the arc. If it takes longer than that, there is a problem and the arc is not going to light at all, which times it out. If THCON goes on before the sleep and x < 3, you would just see a slightly longer delay worse case. That could be happening, but I haven't really noticed it. Changing it to this should solve both...
Do While Not isActive(THCON)
x = x + 1
sleep 1
If x = 3000 then
MsgBox("OK To Move Timed Out")
code "M30"
Exit Do
End If
Loop
Virtually removes any possible delay where arc lights before the sleep and x < 3000 and reduces the gap to where it could get stuck between sleep and x = 3000 to only 1ms. Still a remote chance it could happen. You could bump the time to 5000. If the arc doesn't light in 5000ms you can rest assured that it's not going to light for some reason.
You could remove the sleep completely, but that you'd have to experiment with the timeout number to get a suitable timeout. I think when I tried it I was using something like 12000.
I actually use this in a separate macro that I insert just after the M3.