Core: only schedule another refresh if refresh_interval is positive

If a EngingRefresher.run was already running when the refresh_interval is
dynamically updated down to a non-positive value (0, -1, etc.), then
it's was possible for the refresh thread to go into while (true)
refresh() loop.

Closes #8085