I had the same issue using the HMC5983 magnetometer, (it's the same as the HMC5883L, but with temperature compensation), in conjuction with an Atmel SAMD51 ARM Cortex M4F micro-controller. The falling edges on SAMD51 are particularly harsh. Undershoot and ringing on both the clock and data signals caused the magnetometer to crash with the SCL line held low, effectively hanging the I2C bus.
The same set-up had worked faultlessly with the SAMD21 ARM Cortex M0+ micro-controller, (used on the Arduino Zero).
Rather than adding extra capacitance, (the I2C has a maximum bus capacitance of 400pF), I instead added two 100 Ohm series resistors to the SCL and SDA lines, (in addition to the standard I2C pull-ups at 2.2kOhms). These current limiting resistors reduced the signal slew rate, undershoot and ringing, allowing the I2C bus to operate normally (at 400kHz) oncemore.