I think if you remove the line
traverseInOrder.successor.predecessor = newNode
your algorithm will be correct. Remember, node.successor.predecessor should always equal node unless node is the last node in the list. Same with node.predecessor.successor, unless node is the first in the list.