Just as a data point on the Tomato firmware. I've been running it for about 2 years now, on two different hardware devices. It hangs every once in a while, the intervals range from several days to several weeks. I determined the culprit is QoS: if I disable all QoS, the device will run fine for months. Enabling it shortens the uptime to days or weeks at most.
Since I know this happens reproducibly on two different devices, I am certain it is the software. And unfortunately without QoS the Tomato firmware loses much of its appeal.
Unfortunately this is one of those "unreportable" bugs: there is no way to properly report it, much less have it debugged by original developers.