I agree with your boss. They are bad because they produce methods with high cyclomatic complexity. Such methods are difficult to read and difficult to test. Fortunately there's an easy solution. Extract the loop body into a separate method, where the "continue" becomes "return". "Return" is better because after "return" it's over -- there's no worries about the local state.
For "break" extract the loop itself into a separate method, replacing "break" with "return".
If the extracted methods require a large number of arguments, that's an indication to extract a class -- either collect them into a context object.