The problem is that you are jumping out of the Repeat loop before it hits its End. When a loop is entered, the parser pushes a certain amount of data onto a stack (including the location of the loop start). This only gets popped off when an End is reached (or the end of the program is reached). If you never hit that End, the data never gets popped off, and if you re-enter the Repeat loop as in your code, the parser makes another push, and so on.
What you want is something like:
While 1
Lbl 1
<<code>>
Repeat [conditions]
<<code>>
End
If condition_1:Goto 1
<<code>>
End
Since that is just an example, I would leave it like that. However, in practice, I would actually do:
Repeat [condition_2+condition_3+...]
subprogram
<<code>>
Repeat [condition_1+condition_2+condition_3+...]
<<code>>
End
End
Note that the first Repeat does not use condition_1. If condition_2 is met, then the code exits the inner Repeat loop, then the outer one is exited. If condition 1 is met, it exits the inner loop, but not the outer loop, and also executes the subprogram and code.