Let's do something like, write an alert which dumps triggers and functions from production and staging and diffs the two. Any differences should cause us to scowl.
Snip: example error caused by this problem
I believe something is different again, because a production query failed with:
ERROR 1442 (HY000): Can't update table 'log_civicrm_contact' in stored function/trigger because it is already used
by statement which invoked this stored function/trigger.
See T186355#3069823 and T132527.