If anyone else finds the readings unreliable - it appears that the delay_ms(2) line in the dht22.c file may be too short.
The datasheet says that the sensor requires 800us to prepare the sensor to take a reading - this was giving me a low period of sometimes less than 100us.
Increased this to 10, and it seems to work reliably now.