I have an explanation back from Microsoft Product Support which is the probable cause. The strange behaviour is a "feature" in SQL2000 concerning CheckDB and large heaps. In order to maintain consistency between the heaps and associated non clustered indexes during the CheckDB operation certain actions are taken which later result in memory manager avoiding flushing those pages from the data cache as it is tryuing to keep them available for the CheckDB (which has since completed).
This has been corrected in SQL2005. SQL2000 SP4 will not help.
My workaround to the problem is to restrict running CheckDB to the weekend and then run a DBCC DROPCLEANBUFFERS immediately afterwards to flush the data cache.