After searching around some more, I decided to simple bring up the additional interfaces in /etc/network/interfaces then bind them all to br0 at once:
This works great, except I can't seem to ping from 192.168.1.101 (ubuntu) to 192.168.1.45 (winxp), HOWEVER, I can ping the other way around. 101 will ping to anything else, including other devices on the subnet and the internets.
# The loopback network interface
iface lo inet loopback
# The primary network interface
iface eth0 inet manual
iface vbox0 inet manual
iface vbox1 inet manual
iface vbox2 inet manual
iface br0 inet static
bridge_ports eth0 vbox0 vbox1 vbox2
My initial thought was to try and put eth0 in promisc as I've seen elsewhere, so I added the following under "iface eth0 inet manual"
...which brought everything up as expected, but it didn't seem to fix anything... even after restarting networking on both virtual machines (but not rebooting).
up ifconfig $IFACE 0.0.0.0 up
up ip link set $IFACE promisc on
down ip link set $IFACE promisc off
down ifconfig $IFACE down
EDIT: Not sure what happened, but lost connectivity to 45 from every other computer, so decided it was a problem with that VM rather than 101. Several restarts, removed promisc settings, and it occured to me to disable Windows Firewall.... now working!