Insert Into with Select works in once instance, but not the other. Subquery error or incorrect data
I'll start after you has generated #SurveyTemp table.

I'm not sure to understand your expected result, take a look at your table ordered by demo:

SELECT   * 
FROM     @table_survey  
WHERE    demo IN ('A18+','A25+') 
ORDER BY com, survey_id, demo, wk;

com | survey_id | demo | wk | time | audience | 
--: | :-------- | :--- | -: | ---: | :------- | 
  1 | LO2017    | A18+ |  1 |  300 | 4.7      | 
  1 | LO2017    | A18+ |  2 |  100 | 3.7      | 
  1 | LO2017    | A25+ |  1 |  300 | 2.3      | 
  1 | LO2017    | A25+ |  2 |  100 | 4.3      |


There are 2 records for each demo. If you want to add new record as a result of some operation between these two records, you should decide if you want to group by wk and time (that I think it's the correct way), or not.

In your insert command:

insert into #SurveyTemp (Com, Survey, Demo, Wk, TimeBlock, Aud, AudOne, AudTwo)
(select   Com, Survey, 'A1824', Wk, Time, 0.0, 
          (select sum(aud) from table_survey where demo = 'A18+'), 
          (select sum(aud) from table_survey where demo = 'A25+')
 from     table_survey 
 where    surveyid = 'LO2017'
 group by Com, survey, Wk, Time, 
)


You're grouping by Com, Survey, Wk, Time, but you're calculating overall audience of all demo records, (without considering wk and time):

(select sum(aud) from table_survey where demo = 'A18+')
(select sum(aud) from table_survey where demo = 'A25+')


IMHO, at least wk should be added to the new records, and you should decide what to do with time.

My proposed solution: GROUP BY WK AND TIME

SELECT   Com, survey_id, 'A1824', wk, time,
         (SELECT sum(audience) FROM @table_survey 
          WHERE demo = 'A18+' AND wk = t1.wk AND time = t1.time)
          - 
         (SELECT sum(audience) FROM @table_survey 
          WHERE demo = 'A25+' AND wk = t1.wk AND time = t1.time) AS audience
FROM     @table_survey t1
WHERE    survey_id = 'LO2017'
GROUP BY Com, survey_id, Wk, time;


NOTE: I've added wk and time to calculate sum(audience) for every demo.

Com | survey_id | (No column name) | wk | time | audience
--: | :-------- | :--------------- | -: | ---: | :-------
  1 | LO2017    | A1824            |  1 |  300 | 2.4     
  1 | LO2017    | A1824            |  2 |  100 | -0.6    


As you can see, first record match your expected result.

Without group by wk and time

SELECT   Com, survey_id, 'A1824', 0 AS wk,
         avg(time) as time,
         (SELECT sum(audience) FROM @table_survey WHERE demo = 'A18+')
          - 
         (SELECT sum(audience) FROM @table_survey WHERE demo = 'A25+') AS audience
FROM     @table_survey t1
WHERE    survey_id = 'LO2017'
GROUP BY Com, survey_id;


This is the result:

Com | survey_id | (No column name) | wk | time | audience
--: | :-------- | :--------------- | -: | ---: | :-------
  1 | LO2017    | A1824            |  0 |  200 | 1.8     


NOTE: You don't need to INSERT &amp; UPDATE, it can be done on a single INSERT operation.

Check it: dbfiddle here