Something I calculated today:
The Heavy Ball is the least useful Pokéball overall. Of all Pokémon which can be caught in HG/SS, only 10 gain a bonus. The remaining 441 or so actually take a penalty to catch rate, making it worse than a regular Pokéball about 97% of the time.
As the Heavy Ball gives a flat bonus to catch rate rather than a multiplier, it's not even much use for non-legendaries. Of the six non-legendaries who gain any benefit - Onix, Lapras, Gyarados, Mantine, Steelix, and Snorlax - all but Snorlax have a better bonus using other Pokéballs. The three water types (Lapras, Gyarados and Mantine) are better served with a Net Ball, and Onix and Steelix get the full benefit of the Dusk Ball since are always found in caves. In fact, the Heavy Ball is weaker for Mantine than an Ultra Ball, and weaker than a Great Ball for Onix, Lapras and Gyarados.
Snorlax gains a 2.6x bonus using the Heavy Ball, which is better than Ultra Ball (2x). The only better are Dusk Ball (3.5x if used at night), Timer Ball (3x if used after 20 turns, 4x if used after 30 turns), Repeat Ball (3x if you already have a Snorlax), and Love Ball (8x if you have a Snorlax out of the opposite gender, which is difficult as 7/8 Snorlaxes are male). However, since it's easy to play at night, the Dusk Ball is still better.
The real benefit of the Heavy Ball is to catch Lugia, Rayquaza, Kyogre and Groudon. Their low catch rate makes the Heavy Ball's flat bonus especially useful. Kyogre gains the equivalent of a 7x catch rate, Lugia and Rayquaza 7.67x, and Groudon a whopping 9%. As the legendaries are genderless and level 45 or higher, it's impossible to get the 8x bonus from Level Ball or Love Ball, making Heavy Ball superior.
tl;dr: Heavy Ball is awesome for Lugia, Rayquaza, Kyogre or Groudon. For everyone else it's inferior to Dusk Ball or Net Ball, even Snorlax. Aside from the four legendaries and six other Pokémon it's inferior to a plain Pokéball.