Probably one of the most frequent causes of temperature oscillation is brewers who think: "if I control the HLT power based on a temp sensor in the MLT, I can eliminate the offset." What this does is introduce a significant time delay between adding heat to the HLT and detecting a temp change in the MLT, thus the HLT overheats before the temp sensor detects the condition. The HLT overheating is followed by the MLT overheating. Then you get a similar but opposite temperature excursion as power is withheld from the HLT so it can cool down from overheating, but cools too much before detected by the controller.
Time lags between power adjustments and detection of temperature changes lead to system oscillations.
So, embrace the offset, and control heat input with a temp sensor close to the heating element (in the HLT for a HERMS) to minimize sensing and response delays.
Oscillation problems caused by sensing delays are worse in systems with enough power to change the temperature rapidly (i.e. systems that can heat up rapidly, or do rapid temp steps.)
Another cause of temp oscillations is PIDs that haven't had their parameters tuned for the system they are controlling.