Let's consider the basis of your circuit:
simulate this circuit – Schematic created using CircuitLab
\$V_o = -R_f/R_i V_s + (1+R_f/R_i)V_r - V_r = -R_f/R_i V_s + R_f/R_i V_r \$
Note that Vr is not suppressed by the CMRR of the op amp, but simply by the factor Rf/Ri. So for your values, a 1V change in Vr should lead to 3/10000 Vr = 0.3mV change in the output. This is roughly what you measure.
As far as the non-linearities are concerned, or the changes in Vr sensitivity due to output loading, I can't see causes for them from either the schematic or datasheet, but there are some possible issues with prototyping/testing this that I'd raise:
- you are measuring the output relative to Vr - the wiper on a 100R pot. How are you doing this? Do you have a differential probe or have you connected your scope ground to the pot wiper? If the latter, what other mains connected equipment are in the setup? I only ask as Vo contains signals from Vr as well as Vs, and if you aren't careful there could be ground current issues.
- Are you sure there are no supply ripple issues - you are talking of around a mA of signal current and worrying about fractions of a mV in the output. Try running the reference voltage from a battery, and if you are already, from a separate battery.
- Have you made sure that the input signal current shares no common path with the reference voltage wiring. Ideally the return for the input signal current would be to the junction of the decoupling capacitors on the op amp + and - rails.
Sorry if you have already considered all of these, but they are worth raising.
Edit - added after discussion:
Given that the linearity seems to improve with increasing frequency, this is also suggestive of an issue with bypassing.
If you think about the signal currents for a moment, when the signal is positive, the current into Ri and Rf is being sunk by the op amp, and so returns via the op amp negative supply pin, and hopefully the bypass cap. Similarly, when the signal is negative, current flowing out of Ri and Rf is sourced by the op amp, and ultimately from the positive supply pin and it's bypass cap. So the op amp acts like a rectifier with the signal current coming from alternate supply pins each half cycle.
The ripple on the bypass caps is a form of rectified signal. I suspect that some of this is leaking into the signal path, possibly via Vr. Have you bypassed Vr to only one supply rail? Adding some half-wave rectified signal could explain your problem.
This is sort of like crossover distortion, you can reduce / remove it by loading the output so that the output is always sourcing / sinking current and so all the ripple current comes from the positive / negative supply bypass cap. This is probably why the linearity improves when you load the output. With enough loading all the current comes from one bypass cap so the current drawn from the op amp isn't rectified and so there is no non-linear signal to cause your non-linearity. The undesired coupling to the power supplies is still there, it's just that the coupled signal is linear.
Re your comment: Also noting that the op-amp is running from a single 2.5V supply with a bypass cap very close to the op-amp between the supply rails
This is probably your problem - you haven't provided a path for the signal current to get back to the source. You need substantial bypassing from each op amp supply pin to the ground of the signal source. There is of the order of a mA of signal current, and unless you provide a low impedance path from the op amp supply pins to the ground of the signal source, it is probably meandering it's way back through various ground leads. Worse still, half-wave rectified versions of it are probably getting lost differently! This is why I said originally to think very carefully about the return path for the signal currents.
I've tried to illustrate the return currents on this schematic:
simulate this circuit
I don't know if I have your bypassing arrangement correct.
You can see (hopefully) that in this circuit that you are relying on the bypass capacitor Cbp to reduce the modulation of V+ by the signal current when Vs < Vr. Any modulation on V+ will modulate Vr. If the signal voltage (Vs) swings either side of Vr then the modulation on V+ becomes non-linear. Increasing Vr until it is past the peak of the signal will stop the non-linear feedback (only the upper diode will conduct), but the feedback will will still be there - changing the output levels. Similarly for adding a pull-down or pull-up resistor to the output - this can stop the non-linear effects by ensuring only one of the virtual diodes conducts.
I don't have your circuit in front of me to test out, but this is a feasible explanation of your problems. It is consistent with the variation with setting of Vr, variation with output loading and the reduced effect as you increase frequency. Of course it may not be this - but a good design would eliminate this as a possibility. Try increasing Cbp or add extra filtering to the Vr line. Ideally I'd also prefer to see you lower the impedance of Vr, especially since you are feeding it off to the oscilloscope.