Denis was very close. But the actual solution was a little swapped. As powershell cannot check the CPU over a duration, only the current usage, the SQL Server check had to be used.
So then my first step of the job was to run a PowerShell script that checks to see if the current system time is between the two time constraints. If it is, then the powershell script does nothing. The SQL Server job interprets this as a success.
Then the Job moves on to the last step and performs the update query.
If however, the current time is outside of the range I perform a Start-Time -s 600
to pause the powershell script for 10 minutes (simulating the "once ever 5 - 10 minutes requirement). This is to keep the SQL server agent from constantly trying to run this job.
After 10 minutes, the powershell script throws a custom error. Since I have $ErrorActionPreference = "Stop"
at the beginning of the script the powershell script stops executing after the error. This step is very important.
Since powershell stopped and did not return, the SQL Server Agent interprets this as a failure and will not continue to the step that performs the Update query.
P.S. You guys led me in the right direction. If I had enough reputation, I would upvote you guys.
Edit: Added Powershell Script
$ErrorActionPreference = "Stop"
$StartTime = Get-Date "12:00 AM"
$EndDate = Get-Date "05:00 AM"
$CurrentDate = Get-Date
$ExecuteJob = $StartTime -lt $CurrentDate -and $EndDate -gt $CurrentDate
if(!$ExecuteJob){
Start-Sleep -s 600
throw "Current Time not within Server downtime"
}