By default, the pre_auton function is called at the beginning of task main() only. It is possible to enter the pre_auton function multiple times in a match, however; if either the robot resets itself or if the user manually calls the pre_auton function, the robot will go through the function two (or more) times.
When you say you are breaking yourself out of a loop, what exactly do you mean by that? Would you be able to post your code in question for us to look at? From what I'm seeing, you may be looping in pre_auton and gathering sensor data, then using that data to determine which autonomous function to call? If this is the case, there may be better, more secure ways to do this (please correct me if I am wrong in assuming this though).