It was hard for me to follow the logic, and the double check of the user_access&&og_is_member seems wrong.
This is my suggestion:

  /**
   * Overrides access_space().
   */
  function access_space($account = NULL) {
    return (check_vsite_access() && parent::access_space($account) && node_access('view', $this->group, $account));
  }

  /**
   * Check if vsite access is allowed. The above call to node_access() isn't
   * sufficient as at this point there's still no vsite context, so
   * vsite_get_vsite() will return FALSE, so we explicitly check the value of
   * the "vsite access" field before granting access to the space.
   */
  function check_vsite_access() {
    $wrapper = entity_metadata_wrapper('node', $this->id);

    if (empty($wrapper->{VSITE_ACCESS_FIELD})) {
      return TRUE;
    }

    $value = $wrapper->{VSITE_ACCESS_FIELD}->value();
    if (!in_array($value, array(VSITE_ACCESS_INTRANET_PRIVATE, VSITE_ACCESS_PRIVATE))) {
      return TRUE;
    }
    return;
  }