I bet the following count will get bigger each time too (maybe doubled)
Console.WriteLine("Number of orderDetailDeliveries: " + order.OrderDetail[0].OrderDetailDelivery.Count.ToString());
I think it's because of the way you clone the m:n relation between OrderDetail & Delivery.
For example the bellow code:
foreach (OrderDetailEntity orderDetail in order.OrderDetail)
{
OrderDetailEntity clonedOrderDetail = new OrderDetailEntity();
clonedOrderDetail.Fields = orderDetail.Fields.CloneAsDirty();
foreach (OrderDetailDeliveryEntity odd in orderDetail.OrderDetailDelivery)
{
OrderDetailDeliveryEntity clonedOdd = new OrderDetailDeliveryEntity();
clonedOdd.Fields = odd.Fields.CloneAsDirty();
clonedOrderDetail.OrderDetailDelivery.Add(clonedOdd);
}
clonedOrder.OrderDetail.Add(clonedOrderDetail);
}
The cloned OrderDetailDelivery (added to the cloned OrderDetail Entity) will still hold a FK to the original Delivery Entity which belongs to the original Order Entity.
Instead you should traverse the Graph in one loop from one end to the other, rather than doing it in 2 separated for loops, one from each end.