Когда вызывается PdhCollectQueryData() в первый раз — выдается неправильное значение. Если вызвать эту функцию еще раз, с задержкой, то выдается реальная нагрузка. Скорее всего, эта функция замеряет среднее значение счетчика между ее вызовами.
Названия счетчиков, передаваемые в PdhAddCounter() (для файла подкачки, например) можно посмотреть в оснастке Performance.
Да, точно. Это загрузка процессора, а не температура. C ней у меня ничего не получилось. Пробывал через WMI — у меня там в объекте было неадекватное значение, поэтому забил.