Hi Billy,
You should use alias in the predicates. This is an example of that:
// setup the filter
IRelationPredicateBucket bucket = new RelationPredicateBucket();
// add the relations, as the end object is the same for both relations, you should add alias.
bucket.Relations.Add(CustomerEntity.Relations.AddressEntityUsingVisitingAddressID, "VisitingAddress");
bucket.Relations.Add(CustomerEntity.Relations.AddressEntityUsingBillingAddressID, "BillingAddress");
// when add the predicate, set the object alias you are filtering on.
bucket.PredicateExpression.Add(
(AddressFields.City.SetObjectAlias("VisitingAddress")=="Amsterdam")
& (AddressFields.City.SetObjectAlias("BillingAddress")=="Rotterdam"));
EntityCollection customers = new EntityCollection(new CustomerEntityFactory());
DataAccessAdapter adapter = new DataAccessAdapter();
adapter.FetchEntityCollection(customers, bucket);
For more info please read Advance Filtering. Hope that helps.