Well, having an LED beat to a timer overflow in an interrupt is not a heartbeat at all. It will not tell you if your code is hung or has malfunctioned. All it will tell you is that the interrupt system is functioning. Its a false assurance at best. Similar logic also applies to resetting the watchdog timer within an interrupt. Don't do it in the interrupt is what I can advise. You would want your code to restart if ever it gets hung. You do not want it to falsely clear the watchdog timer and assure you that all is well when it's obviously not.

The best place for such code is in the mainline where your program spends most of its time. If there are other sections in code where you wait for input, it may be a good idea to replicate the code there too. I use a technique where the timer interrupt increments a byte sized counter. The D7 bit of the counter is copied to the Hearbeat Led. If it stops, it means either the timer interrupt has stopped(malfunction) or the program is hung(malfunction). The first one could mean you have shut off the timer or its interrupt. The second one definitely is a malfunction.