Okay, it took me longer than it should have. It turns out the Comparer was working perfectly, but it wasn't 'sticking' to the column. I found that if I check if it exists in the RootTableChanged event and re-attach it if it isn't it all works fine...
Private Sub grdResults_RootTableChanged(sender As Object, e As EventArgs) _
Handles grdResults.RootTableChanged
If grdResults.RootTable.Columns.Contains("DateDue") AndAlso _
grdResults.RootTable.Columns("DateDue").GroupComparer Is Nothing Then
grdResults.RootTable.Columns("DateDue").GroupComparer = New GroupByDateComparer()
End If
End Sub