### GPS Accuracy, Refresh Rate, and Kalman Filtering?

Hello All!
I am working on a project where I have two devices that constantly trying to locate eachother using GPS modules and LoRa transcievers.
Its a buddy tracker for spearfishermen, to make it easier to locate your partner when you're out in the ocean.

Here's a quick example:

And a less quick demo:

However, I am having some growing pains with the precision of my gps modules.
I'd like to be able to use the two gps coordinates to calculate a bearing between the two devices, and use the IMU heading to determine its actual heading.
The IMU is actually working great (BNO055), its actually the gps precision that is gumming up the works.

For example, imagine the red markers are the devices true location, and the circle around them represents their maximum error.
The green line represents the true bearing between devices, and the red the worst case bearing output.

Bearing Error vs Distance:

This small plot shows how severe the bearing error can be in degrees (y axis), and the distance between devices in meters (x axis) given that both units are off by 2m.
So, if you're 5 meters away from your partner, the device could be 40 degrees off - not exactly what I'm shooting for.

Heres about 5 minutes of data from my gps modules at the beach:

In this setup, the modules are about 10cm apart from eachother and stationary the entire time. Modules 1 & 2 are some NEO-6M cheapies, and module 3 is an adafruit 'ultimate' gps.
I'm wondering what options are available to me to help improve this performance a bit and I know the DIY drones community has a lot of experience with this sort of thing.

Some specific questions:
1) If I use a faster refresh rate on my gps module, can I use a moving average to improve the accuracy of the units? Or do the GPS modules already do that kind of thing automatically if you have them in a slow refresh mode?

2) Given that I have some linear acceleration data in global reference frame from the BNO055, it seems like some sort of Kalman filter should be possible to improve the GPS accuracy. I know that the acceleration is noisy, and that some versions of ardupilot have this option available, but I've never deployed a Kalman filter before (lots of FIR filters...) and I was wondering if anybody had really good example or literature of this? What kind of performance improvements would be reasonable to expect if I deployed it correctly? Just need a little hand holding XD

Thanks for your time! Let me know what you think!