By using the Goals module (disclosure: I'm its maintainer) you can have the Rules module take care of "monitoring users about buying their first 2 products" (as in your question). The advantage of using the Goals module, is that you can keep track of all sorts of events that are happening asynchronously (which you cannot do by only using Rules and its events).
So with that it seems that your question (challenge) is reduced to finding a way to configure the appropriate set of Goals and related Tasks. For a basic introduction about Goals, have a look at:
Here is what it would take to implement something like a frequent buyers program:
- Goal = "New customer", with only 1 Task = "Buy 1 product" (say with machine name =
- Goal = "Existing customer", with Task = "Buy 2 products".
The interesting part of this is that you'd only have to write 1 rule (related to that machine name =
buy_product) to keep track of the progress of any user to become either a "new" or "existing" customer (check the video for a similar sample).
Homework: how should a rule look like to indicate that a user bought a product (either the very first one, or yet another one)?