Blynk connection lost every 5 minutes. WiFi is fine. Reconnect halts program

Besides what @PeteKnight said, the real issue here is this code in the loop preventing the auto-reconnection to Blynk

if (Blynk.connected())
  {
    Blynk.run();
  }

Use the standard loop() to enable auto-reconnecting

Blynk.run();
timer.run();

Why?
Blynk.run() has some internal functions to manage the reconnection when WiFi and/or Blynk is lost.

Using the original code, if you have some issue with WiFi/Blynk, then Blynk.connected() is false, and Blynk.run() is disabled.

I now see you have timer to CheckConnection. It’s better, but have to wait some time (15s).

You can check and try

where you can specify Multi WiFi / Servers and better auto-reconnect