hey egnagey,
try adding the following HAVING clause to your SQL to see if that is what you are looking for:
SELECT
tblroofs.roofid, cap.estimatedcost as CapCost, cap.estimateddate
FROM
tblcapitalexpenditures as cap RIGHT OUTER JOIN tblroofs ON cap.RoofID = tblRoofs.RoofID
WHERE
[tblRoofs].[CompanyID] = @CompanyID AND
DATEPART(yyyy, cap.estimateddate) >= DATEPART(yyyy, DATEADD(yyyy, 1, GETDATE()))
GROUP BY
tblroofs.RoofID, cap.estimatedcost, cap.estimateddate
HAVING
cap.estimateddate = MIN(cap.estimateddate)
JP