I believe it's possible to achieve in much simplest way:
SELECT PMP.txtBoardingHouse AS House, RMRT.intPositive AS Descr, COUNT(RMRTC.intValue) AS EventsCount, SUM(RMRTC.intValue) AS ReachedPoints
FROM TblPupilManagementPupils AS PMP
INNER JOIN TblRewardsManagerRewards AS RMR ON PMP.txtSchoolID = RMR.txtSchoolID
INNER JOIN TblRewardsManagerRewardTypes AS RMRT
INNER JOIN TblRewardsManagerRewardTypesCategories AS RMRTC
ON RMRT.TblRewardsManagerRewardTypesID = RMRTC.intType
ON RMR.intCategory = RMRTC.TblRewardsManagerRewardTypesCategoriesID
AND RMR.intType = RMRT.TblRewardsManagerRewardTypesID
WHERE RMR.txtDate BETWEEN '2013-01-01' AND '2014-01-01' AND RMRT.TblRewardsManagerRewardTypesID BETWEEN 19 AND 24
AND RMRTC.TblRewardsManagerRewardTypesCategoriesID BETWEEN 63 and 97
GROUP BY PMP.txtBoardingHouse, RMRT.intPositive
Result should look like:
House Descr EventsCount ReachedPoints
House 1 1 10 20
House 1 -1 10 10
House 2 1 5 10
House 2 -1 5 5
Now, you can 'convert' it to expected format:
SELECT House, SUM(CASE WHEN Descr =1 THEN EventCount ELSE NULL END) AS [+Events],
SUM(CASE WHEN Descr =-1 THEN EventCount ELSE NULL END) AS [-Events],
SUM(CASE WHEN Descr =1 THEN ReachedPoints ELSE NULL END) AS [+Points],
SUM(CASE WHEN Descr =-1 THEN ReachedPoints ELSE NULL END) AS [-Points]
FROM (
) AS T
GROUP BY House
Note: Do not use the same query as a subquery to produce several columns!