Next version will allow you to control what program check rules are applied globally and I think possibly on an instance basis.
What he's complaining about is that timers may not work correctly if not executed every scan. Any yielding instruction (GOTO is yielding) can result in the program not executing the entire block every scan and can result in timers losing time. In $Main that isn't really a problem due to the default timeslice being 65535 (unyielding), but we can't really know that at program check time, so we complain.
How to handle? Depends on what the conditional code is doing. If it is a part of some computational code and needs to be executed inline, I'd use the GOTO for now, and a FUNCTION or SUBROUTINE when we get them implemented in the future. If the code is just a chunk of code that is enabled or disabled as part of a mode, and was previously implemented in an MLS/MLR section, I'd move it to a TASK block.