Я полагаю, вы используете блок foreach, чтобы найти вкладку для удаления. Вы не можете изменить коллекцию во время итерации. Поэтому используйте цикл for вместо удаления и кэшируйте вкладку для удаления.
Затем добавьте его к новому родителю. Это должно сработать.
Не самый элегантный, но сейчас это нужно сделать. По какой-то причине в Linq не реализована операция отклонения Lisp / Ruby / et.all. (или я еще не нашел его. Ближайшая вещь - List<T>.RemoveAll(predicate)
. Если бы она была - вы могли бы сделать что-то вроде ...
tabControl2.Items.AddRange( tabControl1.Items.Reject(tab => tab.Name = "MarkedOne") );