I don't know why, but as you mention, sometimes when wifi fails, network-manager does not find the network again.
I think that the problem is that network-manager, after a wifi connection failure, does not refresh the wifi list (and it seems that network-manager hides the the problematic network). Network-manager does not have a re-scan menu option, and disabling and enabling wireless checkbox on network-manager menu does not force a new wifi scan (as restarting the service does).
When network-manager loses my wireles connection and it does not find my wifi again (and I known that the wifi is operative), I execute the command:
sudo iwlist wlan0 scan
It performs a wifi scan on wlan0 interface (wlan0 is the name of the wireless interface in my laptop) and it shows you the available wireless networks, but as a side effect network-manager automatically refresh its list and finds the lost network.
I prefer to execute the command manually when this problem happens (network reconnecting does not ensure comunication resuming, and some programs will need to be restarted).
But, as you mention, you can cron it, and you can do it without testing connectivity (the scan process updates your wifi list but it does not close your current wireless connection, if you are connected).
If you prefer you can test the conectivity using ping or iwconfig and if you are not connected then launch the scan.
Something like:
#!/bin/bash
if ! ping -c 1 -W 1 your_router_ip &> /dev/null
then
iwlist wlan0 scan
fi
But remember that this script must be sudoed or executed with root privileges. It sends only 1 ping with 1 second timeout.