It looks like randomness and ownership dictates the choice. But there's a few idioms as well.
In the sense "to happen", бывает carries expectedness and habitual connotation while случаться shows some randomness.
-
что бы ни случилось — whatever happens (randomly, unexpectedly)
-
занятия бывают раз в месяц — classes take place once a month (planned, ownership and responsibility implied)
In idiomatic expressions and in the sense of "to take place", бывать (бывало, бывает) is the most perfect fit. In this sense, it is close to проходить, происходить (to take place).
-
снега как не бывало — not a trace of the snow remained (idiom)
-
как ни в чём не бывало — as if nothing had happened (idiom)
Some expressions with случаться are also idiomatic but you can trace the expectedness factor in them as well:
-
Что случилось? (what has happened?) unexpectedly
-
что бы ни случилось (whatever happens) unexpectedly
Finally, when the distinction between randomness and expectedness is not important, either word can be used:
-
такое бывает раз в году (such thing occurs/happens once a year)
-
такое случается раз в году (such thing occurs/happens once a year)*