most ADC's have a relatively low input impedance, and draw non-negligible current when charging the S-H cap. This charging current may be too much for your divider, and it droops, so you read low.
Usually you need to buffer any input to an ADC, for this exact reason. You should find a spare op-amp in your design, or add one in, and simply buffer the ADC input with an op-amp voltage follower.
If you use a 3.3V op-amp and tune the divider to keep your max voltage around 2V, then you can use the internal reference and don't need a 3.3V zener anymore at the ADC input, which is a bad idea anyways due to the leakage currents.