Quote: "...if you call a subroutine that has a loop in it, from within you main loop"
This is not a problem, so long as you are managing the code. Yes, it would be a problem if circumstances such as:
1. Your subroutine loop is using too much timeslice, in this case your SYNC would always be slower than you anticipated. An example might be a loop that iterates 20,000 times, when the code dictates that 10,000 loops will eat all your available processing time.
2. Your subroutine is not synchronising with the rest of your code. An obvious example is moving a bullet in a loop in a subroutine. The bullet would move, and everything else would stop.
What I'm getting at is this: All subroutines should perform just one, streamlined step. It should not rely on local variables which are effectively wiped out each SYNC.
The need for multi-syncing is most likely due to bad coding.
To clarify, you can have many SYNCs in a program, but independant of one another. You could have a menu routine that is self-contained and uses one SYNC, and the main body of the game could be running from a second SYNC, but independantly of the menu.
Hope this helps.