The indicator is not the global: it's just an indicator wired to the global. The indicator only gets updated when the code wiring the global to it is run.
If the sub-VI which updates the global is in the same loop as the code which updates the global, the indicator only gets updated once per call to the sub-VI. Everything in the loop gets executed once per loop iteration. The loop will wait until everything within it (including sub-VIs) executes (and completes)before it continues to the next iteration.
If the global terminal is outside of the loop, only its initial value will be read. If the indicator terminal is outside the loop, only the final value gets read. They both need to be within the loop.
If you need to update the indicator multiple times per exec
ution of the sub-VI, you could put the global - indicator update in a separate loop, running in parallel with the loop calling the sub-VI. To make sure they run in parallel, neither loop should depend on an output from the other loop. They can share inputs, but an output from one cannot be the input to the other or they won't run in parallel: the loop getting the output from the first will wait unilt the first loop is done before executing. (That's the data-dependency model of LabView). The loops can read the same Stop button (if that's how you control the loop) if you use a local variable for Stop in one of the loops.
You could also use control references to update the calling VI indicator directly from the sub-VI.