Как удалить определенный Image с Canvas?
Ну вот, к примеру: private void DoWork()
{
    Canvas CnMapField = new Canvas();

    Image[] images = CopyFrom<Image>(CnMapField.Children);
    foreach (Image img in images)
    {
        if (img.Margin.Left == x)
            CnMapField.Children.Remove(img);
    }
}

private T[] CopyFrom<T>(UIElementCollection collection) where T : UIElement
{
    var images = new List<T>(collection.Count);
    images.AddRange(collection.Cast<T>());
    return images.ToArray();
}
То есть ты foreach(ем) бегаешь по копии коллекции, а удаляешь из оригинала.
Хотя в данном случае приведение к Image не обязательно.
Вы изменяете коллекцию, по которой итерируетесь - так делать нельзя. Можете воспользоваться методом RemoveAll:CnMapField.Children.RemoveAll(img => img.Margin.Left == x);