Why does my heap not fill its pages completely while an identical clustered index can fill to m_freeCnt = 0?
'page split' and 'heap' should not be used in the same sentence. Do you mean why wasn't the row of size 393+change fit in the free space of the first page of the heap? That is because the PFS free space info has not high enough resolution, see Managing Extent Allocations and Free Space:


  The PFS has one byte for each page, recording whether the page is
  allocated, and if so, whether it is empty, 1 to 50 percent full, 51 to
  80 percent full, 81 to 95 percent full, or 96 to 100 percent full.


Would fit in page, indeed, but the PFS only says that the page is '95_PCT_FULL' and the record inserted is fairly big and close to the free space as-per-PFS (95% of 8060 is 403), so the INSERT chooses to allocate a new page. 

With a B-Tree the record position is deterministic due to key order, so the engine must load the page and check the free space, and the record will fit.