I have only been using Ardupilot (Rover) for about a year, so I do not claim to be a good one to answer. Perhaps others will jump in, but I do have a few observations that you can use to build your own opinion:
As far as multiple compasses, I would not think you would get much of an improvement. In my experience, the problem with compasses is not that the device itself is highly inaccurate. The problem is that the earth’s magnetic field is very weak and so any electromagnetic sources in the vicinity of the compass module will interfere and cause an offset. So, I think each compass would see the same interference. Perhaps if it is located away from the first, it would get a different reading, but which is correct? I think you would be better served trying to get one good external compass located where it will be less susceptible to interference, but that is a tall order.
Calibrating live, with the Compass Learn function, with the interference at its “normal” level is what I think is the best way to get a good reading. In the case of my mower, I have found a significant difference in compass reading with the mower blades turning versus not turning. I documented this in this video: https://www.youtube.com/watch?v=gBn3Eygo88o. So, if I am just running the mower in a tuning or practice mode without the blades running, I do a Compass Learn with the blades not running. If I am going to mow, I do it with the blades spinning.
Depending on your budget for your rover, what I think is the best way to get accurate heading is to use two of the new, great ZED-F9P RTK GPS units on your rover in a Moving Base setup. That should give spot-on accuracy. I plan to try that on my mower at some point. I am using an F9P on my rover now, with an F9P stationary base. I will add a second F9P on the rover for the compass function. ALTHOUGH, I must say that as long as I calibrate with the Compass Learn function, I get pretty good heading.
That’s my two cents, and it is worth every penny (and probably no more!)