SAR ADC dynamic range and accuracy
I was expecting the error to increase with 1.25V mid point since the unused ADC translation range increased as my VREF remained to be 3.3V. Why is this?

Simple:
Your 1.25V is stable because it is a lowish noise voltage reference, and it is not disturbed by current being pulled from it since it is only connected to the input of an opamp.
The 3V3 supply voltage is very noisy because it is the output of a voltage regulator of unknown noise, accuracy, drift, and output impedance, which supplies random varying current to the microcontroller. When the microcontroller draws more current, your 3V3 will drop a bit. When the microcontroller does something that requires less current, 3V3 will spike up. The regulator will do its job and keep it within tolerance so the micro does not crash, but there will be ripple and noise.
The output of an ADC is the ratio between the analog input value and the analog reference voltage. If the reference voltage is noisy, unstable, or inaccurate, then garbage in, garbage out.
So I think you assumed the &quot;3V3&quot; rail was constant voltage, it is not if a load draws varying current from it, like a microcontroller does.
Also, microcontroller ADCs are usually of the SAR variety. This is nice because SAR is very good at sampling, so you can sample a voltage exactly at the point in time you want. But unlike a sigma delta ADC, it does no averaging, which would average out the noise on signal and reference.
If you need accurate ADC readings, then you need an ADC reference voltage with the same level of accuracy. There are many voltage reference chips available with a choice of output voltage that will solve your problem, and most come with an internal opamp buffering the reference, so you can also simplify the circuit by removing the opamp. If you need a lower noise reference, or better temperature stability, make sure to check the specifications, and/or add filter capacitors on the output.