a) There's no such thing as an anion that is not an ion. (And I probably should be shot for constructing such a sentence.) However, the gravest error in your answer is your assumption that oxygen and sulfur are loose atoms (or ions), when they are bound together into a sulfate anion. The correct answer is: Mg cation - sulfate anion interactions, thus, ionic bonding.
b) Hydrogen and oxygen in water also have closed shells, so this doesn't really explain the difference. Fact is that lattice ion-ion interactions are much stronger (easily two orders of magnitude) than hydrogen bonds.
c) HCl gas does not exist in a dissociated state (there is no proton acceptor or Lewis base present). Intermolecular interactions are mainly weak hydrogen bonding.
d) Oxygen difluoride has a permanent dipole moment, thus the main interactions are dipole-dipole based. London dispersion forces are much smaller.
e) is correct.