Seeing no other option, I restored DB and SP2 site from backups and reapplied the SP4 patch. Same Data is Null error. sitefinity.log is empty.
I then restored the SP2 backups and tried SF5 migration by installing SF5, and manually configuring the SP2 site for migration by copying MigrationService.svc into the SP2 site. Got assembly errors viewing MigrationService.svc, so I applied SP4 patch to the site and now MigrationService.svc shows Data is Null error. Still no sitefinity.log entries.
I tried running the site from VS2010 and doing the SP2 to SP4 patch there and I get the same Data is Null error. VS never sees the exception, even with Break on all Thrown Exceptions enabled. No entries in the log file, no meaningful descriptions of this error on telerik.com, no descriptions of the differences in the DB from SP2 to SP4 on the site.
I ran an SQL trace against the DB and attempted to access MigrationService.svc in a browser. This generated 486 SQL calls in the trace. I then executed all of these calls and none of them returned a NULL value. There are 144 calls that return zero rows, so it is possible that one of these empty rowsets is causing the 'Data is Null' error.
Any ideas on figuring out what the source of the error is or getting SP4 to work well enough to do the migration? Or is there a way to get the migration service to work against SP2 dlls? This is a fairly large site with lots of content and custom controls and hand-recreating it would be very labor-intensive.