You should probably believe the nVidia. Speedfan requires you to select the correct sensor. It's possible nVidia hand coded an additional offset for some reason. If they map exactly under varying loads (aside for the 10C difference), that's probably what's happening.
SpeedFan will try and read the GPU temps through the SMBus or ISABus (iirc). If it pops up as a selectable temp, SpeedFan is reading them. It's mobo and video card dependent.