On a hunch I've added a delay in /etc/network/if-pre-up.d/bridge. Specifically, in the following fragment:
brctl addbr $IFACE || exit 1 if [ "$IF_BRIDGE_HW" ]; then ip link set dev $IFACE address $IF_BRIDGE_HW fi So that now it reads: brctl addbr $IFACE || exit 1 if [ "$IF_BRIDGE_HW" ]; then sleep 1 ip link set dev $IFACE address $IF_BRIDGE_HW fi This appears to fix the issue. At least I was no longer able to reproduce it while commenting out sleep immediately results in the wrong address. In fact, even echo instead of sleep appears to be sufficient. Let me know if you need me to try anything else.