The original Metroid Prime (GameCube) crashed when the game was paused for too long. (When dumping memory, for example.) The solution was quite simple; backup and restore the Memory Interface I/O registers. Many of them act like counters. I cannot tell you what they are exactly, but I can tell you that taking a snapshot of their state upon entering a long-running pause, and then restoring them before letting the game continue running was the fix.
Here's the relevant code from GCNrd:
Code:
u32 timers[0x20];
MemoryCopy32(timers, (u32*)(0xCC004000), 0x80); //backup memory "timers"
// ...
MemoryCopy32((u32*)(0xCC004000), timers, 0x80); //restore memory "timers"
Where "MemoryCopy32" is like memcpy() but reads/writes 32-bits at a time.
I discovered data in the MI changing sporadically one day in a "memory viewer" that I wrote a long, long time ago. It was a stand-alone program that let you watch memory in a "hex editor"-like view. I made it refresh the data constantly, so I could see any weirdness. Stepping through main memory didn't reveal anything unusual, of course, but stepping through the memory-mapped I/O registered revealed the MI doing crazy things when I wasn't even touching it! To my pleasant surprise, adding this simple code [above] fixed the problem entirely.
As I recall, the "unpause" also did something strange with the first-person view/camera orientation. (Kind of like GoldenEye 007 does with a GameShark Pro.)
This information may or may not be useful for Wii. But perhaps it will give you some ideas!