When node is D&D within the treeview, the NodeMoved event is fired,
When node is D&D between some external object (other treeview, or custom element), then NodeRemoved/NodeInserted events are fired.
From my point of view, it is not so hard to distinguish D&D from other operations. For example, you can store some value indicating original owner of node, or may be other ways.