Interesting problem! I've never run into that, and wonder if you could just either select around it???
Like select all columns by name from the openquery with criteria inside the openquery clause that eliminates the bad row(s) union select all columns by name except the date column, make that an aliased constant with criteria inside the openquery clause that selects the bad row(s), I'll assume the bad row comes up with SortNo = 31.
Like:
select sortno, column1, column2, column3, columnthatcontainsfunkydate
from openquery(DD_Access,'select * from tblData where SortNo <> 31')
union all
select sortno, column1, column2, column3, '2012/4/2' columnthatcontainsfunkydate
from openquery(DD_Access,'select * from tblData where SortNo = 31')
Notice that for the bad row I substitute a quoted constant for the bad date, aliasing the column.
I also wonder if you could fix the record through the openquery itself???
This page has some update query syntax http://rip747.wordpress.com/2007/12/14/linked-servers-performing-select-insert-update-and-delete-crud-actions/.