I think this was a bug in the PSD function in matplotlib 0.98.1 (Debian lenny). This was making me crazy.
I took newer source code of this function from the project and all is going well.
So to get the RMS power from PSD :
y, x = pylab.psd(data, NFFT = nfft, Fs = samplerate)
freqbandwith = x[1]
y = y*freqbandwith
rms = scipy.sqrt(y.sum())
It should be the same as :
rms = data**2
rms = scipy.sqrt(rms.sum()/len(data))