I think discrepancy could be explained by the three points below:
First, screenfetch shows only one value, this means it's an average value.
Second, keep in mind there are different sensors in a system (always talking about CPU):
- one or more sensors on the motherboard "close" the CPU,
- (usually) one sensor for the package CPU and last
- one sensor for each core of the CPU.
Third and last but not least, all these values could be arbitrarily corrected by the software: because the piece of hardware (the sensor diode) which reads the temperature could not physically be in the same position of the hardware that we want to measure it (simply because there is already the piece of hardware itself we want to measure it, the CPU core in this case), thus, in order to make the temperature read by the sensor true, the software increases it by a delta, a fixed and specific value for that CPU model.
NB: I'm not an expert, so if I miss something and/or made a mistake, please correct me!