Arduino issues with accurate ADC and heat?

If the issue turns out to be heat-related, I see two approaches.

One, measure on-board temperature with a LM35, TMP36 or similar analog temperature sensor. Alternatively, a DS1B20 might work great too. If the influence is somewhat linear, you could use the temperature sensing to correct your readings.

My preferred choice would be to read a series of reference resistors. Use their output via a least squares approach to correct your offset and gain on the ADC and you can continuously fix the problem.