I understand the basic problem is that Excel represents 1900-01-01 as the value of 1. However, in Excel it's possible to manually type in values pre-1900.
// this converts the DataTable to an Object[,]
DataTable table = ...
Object[,] arr = DataTableUtils.toObjectArray(table, false);
Range r00 = r0.get_Resize(arr.GetLength(0), arr.GetLength(1));
r00.Value = arr; // <-- this will crash if ...
If the arr[,] contains a DateTime object pre 1899-12-31 then a 0x800A03EC exception will result. Oddly enough, 1899-12-31 is fine, Excel adds one day to the value. Originally I replaced pre 1900 dates with 1900-01-01, but in the output file, they were 1900-01-02!
For now, I'm living with the workaround solution to replace the bad DateTime values. However, if someone has a better solution then please let me know.