Well, you basically start by looking at a message as it travels through
the expected path - use e.g. tcpdump to track it. At some point the
message will take the wrong path, then you work out why.

Looking at your setup (snipped), you seem to have duplicated "ip rule
add" statements. It doesn't hurt, but it's confusing. Also, if you
intended to distribute the load over your two uplinks, I don't see
anything doing that.