Dual slope ADC circuit
Auto-zero is a function that can be added in hardware or software, software is probably better but do a conversion cycle to measure the zero (assuming you have the ability to measure bipolar voltages). You could alternatively add a zero trim with a trimpot but it won't correct for drift.
If the reference is stable by not accurate you can calibrate it digitally or with something like a trimpot. A high-resolution fractional multiply could be a bit of a pain on a small micro or an utterly negligible computation on a more powerful CPU.
You should not need the 1M resistor, you drive the integrator actively up and down so you don't need to worry about it saturating.
Error sources include op-amp offset, reference error, linearity errors due to op-amp non-ideality, resistance variation of the analog switches, dielectric absorption of the integrating capacitor etc. Comparator speed can add some error but the LM311 is probably not a problem given your long integration time.
Errors in the integrating capacitor and resistor and clock frequency should cancel out.