Prevent editing for role after date in field
Yes, you can do that with 

hook_node_access

For example, something like:

/**
 * Implements hook_node_access().
 */
function MODULE_node_access($node, $op, $account) {

  // If editing target node type
  if ($op == "edit" &amp;&amp; $node-&gt;type == 'target_type') {
    // Check against passed account or current user
    if (empty($account)) {
      $account = $GLOBALS['user'];
    }
    // If date field is set, user has target role and date is in the past
    if(isset($node-&gt;field_target_date[LANGAUGE_NONE][0]['value'])){
      $date = $node-&gt;field_target_date[LANGAUGE_NONE][0]['value'];
      if((in_array('target_role', $account-&gt;roles)) &amp;&amp; (REQUEST_TIME &gt; strtotime($date))){
        // Deny edit access
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;

}