Shopping cart business rules
There's no point in an abstract class with nothing in it. I assume a product has name, description, price, a SKU (product id) at least.




  Line items can be a product or membership type.


implies that a membership is not a product yet I see 

public class BookClubMembership : Product




Looks like you'll have every rule iterate the order items. I'd rather see the PurchaseOrderProcessor iterate the items; and only once.



public class PurchaseOrderProcessor {
   public IList&lt;IPurchaseOrderRule&gt; Rules { get; }


The Rules list should not be public. Hide state and expose functionality. If you need to add rules for example, make an Add method.




  Is there a better way for me to program these rules


The Product can have a "type" - with all the types defined in an enum. This eliminates the need for subclasses. 



What is a 'line item'? If it means something I'd expect a class. Use your domain language accurately.




  ... I will need to operate on the order and the item as well.


Show me the codez! 



_customerActivationService.ActivateBookMembership(order.CustomerId,


Is it a valid assumption that the membership is for the person making the purchase?