Putting @i-one and @t-clausen.dk together + a MERGE ended up being the best answer for me:
SELECT A, B, C, COUNT(*) cnt
INTO #tmp
FROM ...
GROUP BY A,B,C
ALTER TABLE #tmp ADD CONSTRAINT pk_#tmp PRIMARY KEY CLUSTERED (A,B,C)
MERGE INTO #tmp X
USING
(
SELECT A, B, C, COUNT(*) cnt
FROM ...
GROUP BY A,B,C
) I
ON X.A = I.A AND X.B=I.B AND X.C=I.C
WHEN MATCHED THEN UPDATE SET X.cnt= X.cnt + I.cnt
WHEN NOT MATCHED THEN INSERT (A, B, C, cnt)
VALUES (I.A, I.B, I.C, I.cnt);
-- repeat for more
SELECT * FROM #tmp
NOTE: This was best FOR ME. The high row-counts inside each of individual SELECTs made this approach worthwhile. Your mileage may vary.
I still consider SQL Server to be pretty dumb in the way that it seems to over-commit resources by running each part of the UNION ALL in parallel and REQUIRING a work-around such as this. Oh well...