My guess is that it's functioning as it should - most home thermometers that aren't calibrated are usually off by anywhere from 2-5 degrees F or more. Assuming your Johnson controller is the most accurate of the 3, then getting 45F and 52F can be considered within tolerance if the actual temperature is 50F.
One other thing that may be a surprise is that the temperature of the fridge will not always be at exactly 50F, but instead will go up and down by as much as 4-5F, only averaging around 50F over time. A few gallons of wort has a much higher thermal mass than the air, and will take much longer to change temperature, and so it's temperature remains pretty much constant at the average temperature, even though the temperature of the air is fluctuating. If you have a min/max thermometer handy, you might use that to determine the range of temperatures over 24h rather than relying upon a single temperature reading.
To save cycling the compressor on an off, which reduces it's working life, temperature controllers operate using a differential - how much above or below the set point the temperature should be before the controller activates or deactivates. The analogue Johnson controllers have a fixed differential of 3 1/2 degrees F below, while the digital controllers have an adjustable differential. Typically, the controllers function by switching on when the temperature rises above the set point, and switches off when the temperature has dropped below the set point minus the differential.
For example, if the set point is 50F, with a differential of 3F, then the controller will activate when the temperature hits 51F (the first value above 50). It will continue to stay on until the temperature falls below 50-3=47F, i.e. 46F. At the point the temperature reaches 46F, the controller switches off, and doesn't turn on again until 51F, and the cycle repeats. This might seem like counter-intuitive behavior, but here's anecdotal evidence on HBT that it's happening.
The downside to the differential is that the average temperature is just slightly below the setpoint - half of the differential below to be exact. With a setpoint at 50F and a differential of 3F, the average temperature will be around 50-(3/2) = 48.5F. If this concerns you, you can bump your setpoint up a degree to compensate.
Keep in mind also that during the first few days of fermentation, the temperature can be 5F above the surroundings for lagers, which you can also compensate for when setting the target fermentation temperature. For example, if you want to ferment at 50F, set the controller to 45F to allow for the heat produced during fermentation. For Ales, the difference can be 10F.
Finally, if you want to be really sure what your fermentation temperature is, it's best to add a thermowell and a separate thermometer. Don't be tempted to use the controller thermometer to both measure and control the wort temperature - the wort changes temperature very slowly, and the controller will overshoot massively, causing everything else in the freezer to be frozen.