It makes the code hard to follow. If the exit criteria is at the top of the loop, it is easy for the reader to figure out what is happening. However a break buried deep in a loop can do something surprising and surprises make code very difficult to follow. Then there are labeled breaks which act somewhat the same as a goto in C (more or less) and can quickly turn your code into an unreadable mess.
Breaks are always ok in switch statements. But elsewhere USE CAUTION!!!!
Remember any significant chunk of code will be maintained by someone else and that someone will want easy to read code not one riddled with hidden break statements.