I think the clue is in the 0% output - the documentation recommends you only call NextValue every second so that it has time to get data, but you're actually calling it 3 times every second. Try:
float usage;
do {
Thread.Sleep(TimeSpan.FromSeconds(1));
usage = cpuUsage.NextValue();
Console.WriteLine(usage + " %");
} while (usage < 50.00);