Why does the time it takes to run this script differ so much between user and system and how I might correct the discrepancy?

You don't show your shebang line, but based on what you're grepping for, I'd say you're running this under Bash. If you don't have a shebang line, you should add one. The Bourne shell doesn't have a built-in time command so it will use /usr/bin/time which has a different output format than Bash's built-in time.

Since you're using Bash, you can set the output format of the time command using the TIMEFORMAT variable so you don't need to use grep and awk. I would use curly braces to avoid any overhead that creating a sub-shell might add.

#!/bin/bash
TIMEFORMAT=%R
for host in 192.168.0.7 192.168.0.8 192.168.0.9; do
    result=$( { time wget -q --header="Host: domain.tomonitor.com" http://$host/; } 2>&1 )
    date=$(date)
    echo "$date, $host, $result"
done

I'm not familiar with Geektool so I don't know how it affects your results. However, the changes above may make the script work more consistently between environments. Have you considered whether the connectivity is simply that much better for the server?

Another thing to check is to see whether you're getting the expected response to your wget command. Times that small sometimes indicate that you're getting an error. Running the script in cron may mail you the error, but you can log it by making the following change:

    result=$( { time wget -q --header="Host: domain.tomonitor.com" http://$host/ >/tmp/wget.$$.out 2>&1; } 2>&1 )

which will put the output and error messages from wget into a file called "/tmp/wget.PID.out" where "PID" is a numeric process ID. The output from time will still go to the variable.