HW watchdog resets the system automatically, if the shutdown is not (periodically) prevented by software; SW watchdog OTOH can do something only, when given CPU time. Thus it must periodically check if the system needs to be reset and respond to that by programming HW.
The end result is that a SW watchdog can fail to respond to total system crash.
Typical programming models of those are:
HW watchdog: [HW circuit] <-- [low priority timer interrupt postponing reset]
--
vs.
--
SW watchdog: [Low priority SW process feeding SW Watchdog]
+ [High priority SW process requiring "food"]