If I'm understanding the problem correctly, you might be able to get the field names in your procedure by using joins instead of unions:
SELECT
sub.invoiceamt as Subtotal
grand.invoiceamt as GrandTotal
admin.invoiceamt as AdminTotal
FROM
(
SELECT I.ReimbursementTypeID,
CAST (SUM(ISNULL(I.AMOUNT,0) - ISNULL(I.OtherAmount,0)) AS NUMERIC(18,2)) AS 'invoiceamt'
FROM grantsystem G
INNER JOIN request R on G.Grantsystemid = R.GrantSystemID
INNER JOIN invoice I on R.requestid = I.requestid
INNER JOIN vlookups L on I.Reimbursementtypeid = L.lookupid
INNER JOIN vSchool VS on G.SystemID = VS.SystemID AND I.SchoolID = VS.SchoolID
WHERE G.fiscalyear=@FiscalYear AND G.SystemID = @SystemId AND I.ReimbursementTypeID IN(34,35) AND
I.SchoolID=Case When @SchoolId ='0' Then I.SchoolID Else @SchoolId End AND
MONTH(R.FundMonth)=Case When @FundMonth='0' Then MONTH(R.FundMonth) Else CONVERT(INT,@FundMonth) End
AND (I.IsActive=1) AND (R.IsActive=1) AND (G.IsActive=1)
GROUP BY fiscalyear, G.SystemID,I.ReimbursementTypeID
) as sub
JOIN
(
SELECT I.ReimbursementTypeID,
CAST (SUM(ISNULL(I.AMOUNT,0) - ISNULL(I.OtherAmount,0)) AS NUMERIC(18,2)) AS 'invoiceamt'
FROM grantsystem G
INNER JOIN request R on G.Grantsystemid = R.GrantSystemID
INNER JOIN invoice I on R.requestid = I.requestid
INNER JOIN vlookups L on I.Reimbursementtypeid = L.lookupid
INNER JOIN vSchool VS on G.SystemID = VS.SystemID AND I.SchoolID = VS.SchoolID
WHERE G.fiscalyear=@FiscalYear AND G.SystemID = @SystemId AND I.ReimbursementTypeID IN(34,35,36) AND
I.SchoolID=Case When @SchoolId ='0' Then I.SchoolID Else @SchoolId End AND
MONTH(R.FundMonth)=Case When @FundMonth='0' Then MONTH(R.FundMonth) Else CONVERT(INT,@FundMonth) End
AND (I.IsActive=1) AND (R.IsActive=1) AND (G.IsActive=1)
GROUP BY fiscalyear, G.SystemID,I.ReimbursementTypeID
) as grand
JOIN
(
SELECT I.ReimbursementTypeID,
CAST (SUM(ISNULL(I.AMOUNT,0) - ISNULL(I.OtherAmount,0)) AS NUMERIC(18,2)) AS 'invoiceamt'
FROM grantsystem G
INNER JOIN request R on G.Grantsystemid = R.GrantSystemID
INNER JOIN invoice I on R.requestid = I.requestid
INNER JOIN vlookups L on I.Reimbursementtypeid = L.lookupid
INNER JOIN vSchool VS on G.SystemID = VS.SystemID AND I.SchoolID = VS.SchoolID
WHERE G.fiscalyear=@FiscalYear AND G.SystemID = @SystemId AND I.ReimbursementTypeID IN(37,38,53) AND
I.SchoolID=Case When @SchoolId ='0' Then I.SchoolID Else @SchoolId End AND
MONTH(R.FundMonth)=Case When @FundMonth='0' Then MONTH(R.FundMonth) Else CONVERT(INT,@FundMonth) End
AND (I.IsActive=1) AND (R.IsActive=1) AND (G.IsActive=1)
GROUP BY fiscalyear, G.SystemID,I.ReimbursementTypeID
) as admin