Very quick thought. Probably not the most optimized but Why not simply coming and two WHERE statements using an OR?
SELECT * FROM myDataTable
WHERE(
(
(DATEDIFF(hh, TimeDate, GETDATE()) <= (select NumberofHours from myHoursControlTable where District = 2)
AND Fleet = 'District 2'
AND NOT [Speed] = 0
AND ([AssetDesc] LIKE 'Sander/Plow%' AND Input2On = 'On' AND Input1On = 'On'))
)
OR
(
(TimeDate <= (select StartTime from myHoursControlTable where District = 2)
AND Fleet = 'District 2'
AND NOT [Speed] = 0
AND([AssetDesc] LIKE 'Sander/Plow%' AND Input2On = 'On' AND Input1On = 'On'))
)
Update
Since both A) and B) share a large number of conditions, you could combine like below. This is taking for granted you want to catch rows fulfilling conditions EITHER A) OR B).
SELECT * FROM myDataTable
WHERE
(
DATEDIFF(hh, TimeDate, GETDATE()) <=
(select NumberofHours from myHoursControlTable where District = 2)
OR
TimeDate <= (select StartTime from myHoursControlTable where District = 2)
)
AND Fleet = 'District 2'
AND NOT [Speed] = 0
AND ([AssetDesc] LIKE 'Sander/Plow%' AND Input2On = 'On' AND Input1On = 'On');