I’ve managed to resolve the above issues now. For anybody reading this in the future, there were two strange sources of oscillation which were causing me issues.
The first was the DC corrector, as has been discussed before in this thread. . I had tried a fix for this earlier, but I realise that I was putting the fix in the wrong place, and so it was getting negated. I will post more details of the fix that worked in that thread.
The second issue was that for some reason, for any frequency other than 915 MHz, the TX and RX BB frequencies were not being set to 0. but were instead being set to:
[INFO] SoapyLMS7::setFrequency(Rx, 0, BB, 2.44141e-06 MHz)
[INFO] SoapyLMS7::setFrequency(Tx, 0, BB, 2.44141e-06 MHz)
This is not an issue with the LimeSuite drivers, but something higher level (either in SoapySDR, Osmosdr, or GNURadio), which is for some reason calling setFrequency() with a strange value for BB. To fix this I just forced the frequency to always be 0 when trying to set the BB frequency, in the SoapyLMS7 drivers.
EDIT: it actually is caused by the LimeSuite drivers, see Josh’s replies below.