1) The conceptual difference is that the node does not have a data_map. The node "contains" the object, so $node.object.data_map is the correct way. $node.data_map is a shortcut.
2) There is a practical difference depending on some conditions.
- You must be using ezpublish 3.5
- TemplateOptimization must be enabled - The variable $node must not be set by a module, but fetched in a template (in other words, a template loaded by a custom module).
In those conditions, $node.object.data_map doesn't work, but $node.data_map does.
I will also add this to the discussion - right now, using $node.object is very dangerous when referencing images, because of the PHP bug noted here (whose cause I still don't really comprehend):
Working around this bug prompted my question originally -- after two solid long days of working I have finally eliminated all reference to $node.object.data_map.(image datatype attribute)[original] in my code, replacing it with $node.data_map.(...).
So.. it would seem that for all template development the safest bet by far is to use $node.data_map rather than $node.object.data_map, given the bug and Hans' TemplateOptimization comments.