Just my general thoughts. You actually aren't doing any iteration on the node so why do you need an iterator here? References or pointers would do just as well. I would do initialize my nodes like
DNode<E>* temp = new DNode<E>(iter.node(), x, iter.node()->next());
// Initialize new node inbetween previous nodes
temp->prev()->set_next(temp); temp->next()->set_prev(temp);
// Cut ties between nodes to avoid cycles.
Assuming left is prev and right is next. Then all you have to do is set next on iter. Also your variables kind of put you on the spot in terms of remembering what they are. It looks like in this code you are taking the current node and then saying to the node after it I'm after you. You then initialize the new node with the current node both before and after it. You then take the new node go to the node before it which should be the current node and set the current node as the previous node. This is assuming that the functions do what my mind thinks they would do for a doubly linked list which is apparently what you have going on.