Although decode could be a hot stages on some chips, it's not even in the top 5 on the last couple of chips that I've worked on. On ours, it's the registers, the integer execution unit, and the floating execution unit that generate the most heat... when they are active.
There are a number of ways that a CPU can generate less heat when idling, but they all mostly rely on some trick to not fire the clocks to a particular section of a CPU, or to not allow a portion of a chip to attempt to change state. The key here is that, if you can figure out that nothing is going to happen in the next clock cycle, then you can send a signal that prevents the clock from even firing. On the designs that I have worked on this was often done using "clock gating" in which, essentially, the clock is AND'd (or more commonly, NAND'd) with a signal that says, essentially, "do something this cycle". The hardest part of this technique is generating a signal that knows what will be done in the next cycle early enough so that you can shove it into a AND gate to prevent the next clock from firing for a particular block or pipeline state. This has been, in my experience, a fairly hard thing to do in the timing constraints so that it's a bit of a lossy guess (the clock would fire occassionally when it wouldn't need to for corner cases), but in general you can eliminate a lot of activity with this method. Even if clock gating specifically isn't used, the general idea of having a signal which "gates" execution of a section of logic frequently is.
Why does preventing the clocks from firing result in less heat? On modern CPU's the clock delivery system can use as much as 70% of the total power dissipation of the CPU. And also on static CMOS logic, in an idealized case, it only generates heat when the transistors are switching. Even in the non-ideal world that we live in on a 90nm process, most of the energy lost is due to switching. So if you stop the clock signal from going anywhere you save the power from the clock itself and you prevent logic from trying to update itself.