@Joseph Mason yeah your gut is right on this one. What you're describing — uncorrelated RSSI swings in that 10-15 dB range on specific links while others are clean — is pretty classic multipath fading. The fact that it doesn't track weather or time of day actually reinforces that, because you're not dealing with atmospheric effects or Fresnel zone obstruction, you're dealing with fixed reflectors (buildings, rooftop structures, water towers, whatever's in the geometry) creating standing wave patterns at your receiver location. The interference pattern is essentially baked into the geometry, so it stays weird consistently rather than varying with conditions.
The reason some links are clean and others aren't usually comes down to how many significant reflectors exist in that specific corridor and whether any of them are putting a reflected path within a few wavelengths of path-length difference from your direct signal. At 2.4 GHz the wavelength is about 12.5 cm, so you don't need much geometric difference to flip between constructive and destructive. Links with clean line-of-sight and no large flat surfaces in the Fresnel zone tend to behave well. The nasty ones usually have a glass facade or a rooftop HVAC unit sitting at exactly the wrong angle.
Before you start physically moving antennas, worth logging RSSI over a longer window first to see if the swings are truly static or if there's a slow drift (which would suggest thermal expansion of structures slightly changing reflection geometry over hours). If it's genuinely static, then yeah, small antenna repositioning — even 10-20 cm vertical — can shift you out of a destructive null pretty dramatically. The BLE module's receiver sensitivity gives you real headroom to absorb the loss on the good links, so you have room to trade some of that margin for a geometry that dodges the worst of the multipath on the problem ones.