I've looked into this a lot more. I'm thinking that there is a "bug" in the BuildFieldCollisions method in DataLayer, in that it can't handle NULLs (at least for dates).
There are definitely situations were the best choice is to have a NULL value in the database for a date. This means the date hasn't been set. I have a deliverables table with a delivery date. Until the deliverable is actually delivered, there should be NO delivery date. It should be NULL. Also, a reporting tool will be used to report on this table. The users can build their own reports. This means that either:
- I have to train users to use 1/1/1800 if they want a date that isn't set
- I have to somehow embedd this in the reporting tool, which means if it ever changes, I have to remember to change it in two places.
So, I really think BuildFieldCollisions should be able, some how, to handle NULLs.
BTW, I found the RetrieveConcurrencyRowHandler property on BusinessLayer and this can be used to massage the server row so there are no nulls, but I don't see any way to fix the current, local row, without ending up actually saving my alternate value into the db. Maybe I'm missing something....

Finally, I'm starting to think that the issue with the custom field property is some weirdness on one of my tester/users machines. The custom field should never be checked (as near as I can tell) based on the code (it uses the server row, which normally won't include any additional custom rows). However, I'd really like confirmation on this or any other concurrency issues I might need to deal with when using custom fields.
Thanks!