Why the delays in the measurement loop? If the "ADCRead()" function returns a valid result, the ADC is immediately ready to take the next measurement. 20uS isn't long but enough to make the result less accurate.
I would also be concerned about accuracy at low voltages, the diode doesn't drop a constant voltage across itself, the amount is not linear, particularly at the lowest voltages. You should either offset the voltage with a small DC 'pedestal' to keep the diode in it's conductive region or better still use a precision rectifier circuit.
Note that if you want the RMS value, there is no need to cater for polarity reversal so you can just use the 'Mean' or average of all the measurement but you need to take enough of them to cover the whole half cycle, no more and no less, and the total will be bigger than an unsigned int can hold so you need to think of using longer variables.
Brian.