if ( btr.IsFromExternalReference || btr.IsLayout )
Цель этой проверки была исключить из обработки Layout и внешние ссылки. Выходит я не так это реализовал?
Не так. Внешние ссылки тебе действительно нужно пропустить, а вот проверку btr.IsLayout нужно убрать.
А вот дальше нужно понимать чего ты добиваешься, т.е. просто нужно ли заменить "слой1" на "слой2" для всех примитивов или только для элементов внутри блока и вставки этого блока. Если для всех, то достаточно убрать проверку на btr.IsLayout.