This seems to be an issue with the order that the interfaces are being brought up in. Looking in the /etc/init.d/network init script there is this bit that constructs all the interfaces:
# find all the interfaces besides loopback.
# ignore aliases, alternative configurations, and editor backup files
interfaces=$(ls ifcfg* | \
LANG=C sed -e "$__sed_discard_ignored_files" \
-e '/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d' \
-e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
LANG=C sort -k 1,1 -k 2n | \
LANG=C sed 's/ //')
The output of this command produces this list:
br0
eth0
I haven't found a solution to this other than to include a ifup br0 in the /etc/rc.local script to manually force the br0 up AFTER the eth0 device has been brought up.
EDIT
I just created a /etc/sysconfig/network-scripts/ifcfg-br0 like this and upon rebooting had br0 start AFTER eth0!
# ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
STP=off
IPADDR=192.168.1.200
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
Example /etc/sysconfig/network-scripts/ifcfg-eth0
# ifcfg-eth0
DEVICE=eth0
#BOOTPROTO=dhcp
HWADDR=BC:AE:C5:34:C9:E8
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
With the files like this I now see the network devices coming up like this:
Bringing up interface eth0 [ OK ]
Bringing up interface br0 [ OK ]