The basic problem is that you're bringing all the records into Access and then applying the date filter. I would suggest using a pass-thru query, following these steps. . .
-- create a stored procedure like this
CREATE PROC prcTest
(
@StartDate datetime,
@EndDate datetime
)
AS
SELECT ManHoursPerDistrictPerMonth.District, Sum(ManHoursPerDistrictPerMonth.SumReg) AS SumOfSumReg, Sum(ManHoursPerDistrictPerMonth.SumOT) AS SumOfSumOT
FROM ManHoursPerDistrictPerMonth
WHERE (((ManHoursPerDistrictPerMonth.InvYear)=Year(@StartDate)) AND ((ManHoursPerDistrictPerMonth.InvMonth)>=Month(@StartDate) And (ManHoursPerDistrictPerMonth.InvMonth)<=Month(@EndDate)))
GROUP BY ManHoursPerDistrictPerMonth.District
UNION SELECT "zTotal" AS District, Sum(ManHoursPerDistrictPerMonth.SumReg) AS SumOfSumReg, Sum(ManHoursPerDistrictPerMonth.SumOT) AS SumOfSumOT
FROM ManHoursPerDistrictPerMonth
WHERE (((ManHoursPerDistrictPerMonth.InvYear)=Year(@StartDate)) AND ((ManHoursPerDistrictPerMonth.InvMonth)>=Month(@StartDate) And (ManHoursPerDistrictPerMonth.InvMonth)<=Month(@EndDate)))
GO
note that I took your Access query, replaced the two date functions with parameters, and also removed the semicolon at the end of the first half of the query.
Then in Access, run these statements in the Immediate Window (Alt-F11, then Ctrl-G:
' do this from the Immediate Window
CurrentDb.CreateQueryDef ("qryTest")
CurrentDb.QueryDefs("qryTest").Connect = CurrentDb.TableDefs("one of your linked tables").Connect
CurrentDb.QueryDefs("qryTest").sql = "prcTest '',''"
Change your report to use qryTest as the data source.
Finally, in the button Click() event that opens the report, add this before you DoCmd.OpenReport
' do this in the button Click() event
CurrentDb.QueryDefs("qryTest").sql = "prcTest '" & Format(getStartdate(), "mm/dd/yyyy") & "', '" & Format(getEndDate(), "mm/dd/yyyy") & "' "