The rule you've defined above will only execute if IsPreferredCustomer is true. What you want is something like this instead:
RuleFor(x =>x.Discount).GreaterThan(0).When(x => x.IsPreferedCustomer == true);
RuleFor(x =>x.Discount).LessThanOrEqualTo(0).When(x => x.IsPreferredCustomer == false);