Решение получилось, причём достаточно простое.
Добавляем правило в
/interface ethernet switch rule
, которым устанавливаем трафику от телефона нужный vlan, и наводим порядок в других правилах:
/interface bridge add add-dhcp-option82=yes dhcp-snooping=yes igmp-snooping=yes name=switch-bridge vlan-filtering=yes
/interface bridge port add bridge=switch-bridge frame-types=admit-only-vlan-tagged ingress-filtering=yes interface=sfp-sfpplus1 trusted=yes
/interface bridge port add bridge=switch-bridge interface=ether1 pvid=100
/interface bridge vlan add bridge=switch-bridge tagged=sfp-sfpplus1 untagged=ether1 vlan-ids=100
/interface bridge vlan add bridge=switch-bridge tagged=sfp-sfpplus1 untagged=ether1 vlan-ids=200
/interface ethernet switch rule add new-vlan-id=200 ports=ether1 src-mac-address=50:67:AE:00:00:00/FF:FF:FF:00:00:00 switch=switch1
На телефонном аппарате убираем всё про vlan-ы, порт eth1 оставляем в режиме any (хотя можно будет попробовать ещё untagged) с PVID 100. В порт eth1 пускаем vlan 100 и 200 untagged. Добавляем правило что трафик, идущий с порта eth1 с MAC наших телефонов Cisco (по маске) насильственно маркировать тегом 200.
По умолчанию, в списке правил есть динамическое правило, которое заруливает трафик udp/67-68 на CPU. Так вот, если это правило оставлять первым, то телефон регистрируется в сети VLAN 100, что неправильно. А если переместить его вниз, то всё начинает работать как было задумано.
Дополнительным бонусом получившейся конструкции стало то что эти порты коммутатора теперь стало можно объявлять недоверенными, что улучшает управляемость.