Может быть, вы могли бы попробовать использовать Subversion. Есть библиотеки для управления им из C #. Итак, чтобы начать транзакцию, вы просто начинаете работать, а для отката вы делаете откат. Передача вашего SVN-дерева завершает вашу транзакцию.
Я не знаю, слишком ли это простой подход. Вполне может быть, но то, что вы описали, требует только некоторых свойств транзакции. В частности, вы указали, что вам нужна атомарность (то есть возможность отката изменений в нескольких файлах одновременно). Долговечность подразумевается, но вы получаете это за коммит.
Вы не упомянули никаких ограничений согласованности, за исключением того, что существуют условия и исключения инициализации, но, вероятно, ваш код может справиться с ними и вызвать откат в случае нарушения какого-либо правила.
Изоляция бывает трудной или легкой. Все зависит от того, нужно ли вам поддерживать более одной транзакции одновременно. Требуется ли разрешение одновременных обновлений? Если нет, просто создайте что-то для обеспечения последовательного доступа к системе, и все готово. Если вам нужны одновременные обновления, боюсь, у меня нет идей: -)