Sorry this got buried.
This isn't actually a bug. Broadcast message does work in a loop, the thing is that if you put a both a loop and a receive message behaviour onto the canvas, they can be executed in any order. The problem occurs when the loop behaviour is executed before the receive message behaviour is.
Solution: Put the loop and receive message behaviours into the same behaviour bundle, with the receive message executed before the loop behaviour.