Remarkably, no. The only built-in way to do this would be to call DataTable.GetChanges(), but since that would copy all of the changed data and could potentially waste a lot of memory, it is probably not a good idea.
The implementation of DataSet.HasChanges() just loops through the tables and rows anyway, so if you implemented your own HasChanges(DataTable) method, that would be the way to do it. Strange that they didn't build that in though, especially with all the upgrades they did to DataTable in 2.0.