VMware standard vSwitches don't do bonding, this is a common misconception. Also, vSwitches never forward received frames back out of a physical link, so there's no need for STP (doesn't hurt though). So firstly, forget LAG.
You're describing "Routed based on the originating virtual port ID" correctly: a specific vNIC will always stay on the same switch port unless there's a failover.
Judging from your scenario, this isn't too bad. You could assign your physical host NICs to a vSwitch, create two port groups - one primarily using the first port with the second port as failover, the other vice versa - and assign two vNICs to each VM instance, each one connected to one of the port groups.
Then, when you load balance across all those vNICs the traffic should even out. Alternatively, you could of course use only a single vNIC per VM and distribute them evenly to the port groups.
If both switches are used for the same VLAN/subnet they need to be able to talk to each other - unless the shaper bridges, you need a connection between them.
When using different VLANs/subnets you might want to connect them by router - but then the failover scenario outlined above won't work
The problem you're experiencing probably originates from the shaper: if there's no clear subnet division (or equivalent) between the blue and the red segment it's quite possible that the shaper chooses the wrong egress port and the frame can never reach the correct port. Note that if the shaper can't use the desired port you'd get (mostly undesired) traffic between both switches).
It might not be the most straight-forward thing but I wouldn't connect the switches and go with two subnets. This makes sure the shaper is using the correct egress port. In case of a switch failure half your bandwidth will be gone anyway, so you could very well let that be felt by the VMs - so: two port groups with one physical NIC each, no failover. For administrating the hosts and VMs, just use a third port group with its own VLAN ID that does have failover in the vSwitch.