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))