What other problems can be caused when using the JMP instruction to navigate through subroutines instead of using the instruction CALL/RETURN?
So many misconceptions, where to begin...?

First, the real problem with your code is a badly architected loop.  Not that CalculateNextPower is immediately before the loop and at the end of the loop.  This code should simply be put in-line at the start of the loop, right below Back1.  Then there wouldn't be any need to jump or call to code outside the loop.

Second, nothing pushes a instruction onto the stack.  CALL instructions generally push addresses onto a stack.  That is the address of the instruction following the call.  The RETURN instruction pops this address off the stack and jumps to it, thereby returning to immediately after the CALL instruction.

In general, the point of the CALL/RETURN mechanism is to allow execution of a piece of code in multiple routines, but have the piece of code only exist in memory once.  CALL/RETURN allows for temporarily diverting execution to the single piece of re-usable code, then going back to where you were.