Кстати сейчас провёл измерения и увидел, что если Invalidate() вызывается 100 раз в секунду, то OnPaint от 13 до 76 раз. А если Invalidate() вызывается 10 раз в секунду, то OnPaint от 5 до 9 раз

В любом случае при разных значениях, OnPaint ни когда не вызывался больше раз чем Invalidate()!
Я помню, что Invalidate() запросы накапливаются и обрабатываются все разом. Вот только как мне управлять количеством вызовов OnPaint? Разместить в OnPaint код который будет вырубать все попытки вызвать метод больше определённого количества раз в секунду? Но в результате могут появиться рывки в движении индикатора. Может быть есть встроенные средства управления этим процессом?
И как вы думаете какое количество перерисовок индикатора в секунду оптимально? Не забываем, что он вращается, причём скорость вращения можно задавать разную!