I posted this question on the MSDN forums and the suggestion was to adjust the hItem
== NULL check since hItem
now is actually NULL during the CDDS_PREPAINT
stage on Windows 8 (i'm assuming) so the draw function gets skipped.
Changed the following code from
if(hItem == NULL)
if(hItem == NULL && tvcd->nmcd.dwDrawStage != CDDS_PREPAINT)
It now draws fine on windows 8.