There are a few possibilities:
Operating the CPU outside of specification could result in erratic behavior (such as too much heat, too much voltage)
If an interrupt fires in the middle of a non-atomic operation, and the interrupt modifies the result, weird behavior could happen. (For example: if you're attempting a 16-bit operation on a 8-bit processor. Perhaps you are calculating
A * B
, but you have a timer that fires and changes the value ofA
halfway through the multiplication. This is really considered a software bug, not a fault.There's always cosmic rays. Chips are so small these days that you can't really blame any problems on them, but they are a concern if you have a multi-year autonomous system.
As for preventing faults, during the Space Race, the launch computer used triple-redundant logic to verify every computation. STMicroelectronics has a line of fault-tolerant dual-core microcontrollers that run both cores with the same code, and a fault condition arises if either core disagrees.