I believe that the hardware (PMU?) forces a power off
when the fan speed control registers are not accessed
for some time. This delay may depend on the temperature.
Yes, to me as well it sounds like the PMU is unhappy
because you didn't talk to it for too long while
things are hot. Pretty hard to prove this assumption
of course -- but try Gabriel's suggestion, if that
works, it means this diagnosis is at least slightly
correct. A real fix is something different of course.
As a stab in the dark, you might try to force the fans at
full speed in an __init function. This will make the machine
noisy for some time before the loop starts regulating fan
speed but might buy you some time.
Segher