How to create a Drupal rules condition that checks CiviCRM contact's Group or Tag or Subtype
Well to answer this question, basically I had to write a couple of new Rules conditions.  They have been added to the CiviCRM Entity project, right now they are in the -dev version.

I added two new Conditions. CiviCRM Contact is of subtype, and CiviCRM Contact is in Group.

They both require a civicrm_contact object is loaded in the rule, which you get automatically if you are reacting to "CiviCRM Contact is created", or "CiviCRM Contact is updated" Rules events.

The "CiviCRM Contact is of subtype" rule allows you to select which contact subtype to check for.

The "CiviCRM Contact is in Group" rule allows you to select which group to check if the contact is in.

This functionality will be in the next stable version of CiviCRM Entity.

These conditions are used as any other Rules conditions are....

Here's a sample of a Rule that shows a message on the site if a contact with sub-type Student is updated:

{ "rules_show_message_if_contact_is_subtype_student" : {
    "LABEL" : "Show Message if contact is subtype student",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "civicrm_entity", "rules", "civicrm" ],
    "ON" : { "civicrm_contact_edit" : [] },
    "IF" : [
      { "civicrm_entity_contact_is_subtype" : {
          "civicrm_contact" : [ "civicrm_contact" ],
          "contact_subtype" : "Student"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : { "message" : "Contact of subtype student saved!" } }
    ]
  }
}