Conciliar dos colecciones de objetos

Tengo un formulario donde los usuarios pueden modificar una colección de objetos usando un DataGrid. Cuando se abre el formulario, creo una copia en profundidad de la colección original y, si se presiona el botón Cancelar, solo descarto esa copia.

El problema es que cuando se presiona el botón OK, tengo que conciliar los cambios que podrían ser:

Propiedades modificadas de objetos existentes.Nuevos objetos agregados a cualquier lugar en la colección.Objetos existentes eliminados.Objetos existentes reordenados.

Dado que necesito conservar las referencias originales, no puedo simplemente borrar la colección y agregar los elementos modificados.

¿Conoces un algoritmo simple que sincronice dos colecciones como esta?

Estoy usando C # 3.5, entonces LINQ está disponible.

Respuestas a la pregunta(3)

Su respuesta a la pregunta