Hello, you just stepped right in the middle of an unsolvable debate amongst educators.
Some people think (as your child does) that if you reach the goal, then the program should exit immediately and the level should be over.
Other people think that the goal should only be checked when execution wraps around the top of the loop. Their argument is that in programming the loop's conditional is checked once for each iteration, not continuously.
Interestingly, teachers from the US are most vocal about the first option, and teachers from Germany are the most vocal about the second option. Blockly Games has tried both approaches, and we have received complaints no matter which we do.
In the end we've chosen to go for the stricter approach. Our reasoning is that whenever this issue comes up, it's the result of a disorganized program that doesn't have any internal logic. And that appears to be the case here too. The pictured program is a random assembly of blocks which happens to stumble across the goal. You can't explain to someone in words what this program does. The solutions we are looking for are conceptually simple. Such programs would always end the loop on each square.