I heard from a coworker that an older version of the product had bumped from a 16MHz chip to 20MHz to run more code. Chip supplier screened parts for the higher speed, but didn't cover higher speed across the normal voltage range. When supply dipped (within the old spec) switching speeds slowed. The first circuit to fail was something in the branch condition logic. This caused all conditionals to not branch, which lead to running all code in the memory space in order. That included a few instructions to.... fire the airbag. It was a rare thing, but a very big deal.
“Business woman on plane: Are there a lot of these kinds of accidents?
Narrator: You wouldn't believe.
Business woman on plane: Which car company do you work for?
Narrator: A major one.”
How do you even protect against such a thing you just described? Put the airbag on a diffent microprocessor?
Of course it's possible to create more and more improbable scenarios. That's not to say those never happen; I've seen really improbable occurrences.
(We may have learned a bit about noise and improved further iterations of the device, but sw change was enough.)