CR needs to read the data...which occurs at the time the report is generated (WhilePrintingRecords). So if you put them in the header, no records have been read, as of that time, so the total is 0. All conditional totals need to be in either a subreport or the group footer.
A subreport will pause while it reads all the pertinent data and then the main report resumes, so there is the double hit to the report, having to get the data and read it again...so subreports should be used with that caveat in mind.
Either way, CR needs to read the data before it can report on it. A basic SUM for a group can be computed before the printing as all of the data is available in the table (raw data).
Hope it is not too muddled