Try switching EK2/3_MAG_CAL to 2, use heading fusion all the time, it is working well in my case so far, i am also in trouble with varying magnetic fields on small quadcopter.
But @tridge told me that one need well calibrated compass and need to make sure not much magnetic interference from motors to fly safely.
The best way to do that AFAIK is to use the latest ArdCopter 4.1.0-dev (latest github version). It has a GSF that can AFAIK work without a compass.
@amilcarlucas I don’t know much about this feature, but i am really interested in working with it and like to compare it with simple heading fusion, what you think this approach is better than using simple heading fusion ?