To be honest, I dont know, however, what I do, and I dont know if this is a no-no but it seems to work fine, I start with AddWithAnd. Doesnt seem to matter how you add the first predicate.
// filtering
IPredicateExpression filtExp = new PredicateExpression();
if(entrantId != -1)
filtExp.AddWithAnd(PredicateFactory.CompareValue(VehiclesFieldIndex.EntrantId, ComparisonOperator.Equal, entrantId));
if(seasonId != -1)
filtExp.AddWithAnd(PredicateFactory.CompareValue(VehiclesFieldIndex.SeasonId, ComparisonOperator.Equal, seasonId));
Matt