pwm audio signal with low pass filter
Really short answer: 

Inaccuracy of your probe! Two reasons come to mind


We don't know what that probe does, mathematically (and, by the way, that's always a bad situation in a measurement environment). Possibly it's just getting some \$N\$ samples, and doing an \$N\$-point FFT on that, and looks for a maximum absolute value. Now, with \$N\$ being necessarily finite, the frequency resolution is finite, and maybe 20 kHz is just impossible to represent with that resolution, but 20.5 kHz is the closest possible point.
Your filtered signal does indeed contain your original sine, but it inevitably also contains some amount of the triangular wave's spectral components, which happen at 300 kHz and multiples of that. The job of your filter was to get rid of these, but any real filter only has finite attenuation, so it can't suppress strictly everything that comes through at higher frequencies. Now, these higher frequencies confuse the (mysterious) frequency estimator and slightly "pull" the displayed frequency higher.