WASAPI Exclusive is all good now.
No change on the RMS front. Setting the timer to 200ms just made the needle less reactive but it still registers as 3db lower.
I've set the plugin to take samples of the peak values every 20ms and I use the average of the last 10 samples. With this method running a test file with
-30, -20, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0
The needle sits dead on all the correct values.
If I change it to use RMS values with samples taken every 200ms (or 21ms like previously) it sits 3db lower, it's hard to tell for the -30 value but from then on the needle is pointing at the following -
-30, -23, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3
It appears to be exactly 3db lower right across the range.