What is the equivalent of hook_property_info_alter()?
I suppose you want hook_entity_base_field_info(). By using a computed field based on a class, you can get a behavior similar to properties.

function hook_entity_base_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) {
  if ($entity_type-&gt;id() == 'node') {
    $fields = [];
    $fields['mymodule_text'] = BaseFieldDefinition::create('string')
      -&gt;setLabel(t('The text'))
      -&gt;setDescription(t('A text property added by mymodule.'))
      -&gt;setComputed(TRUE)
      -&gt;setClass('\Drupal\mymodule\EntityComputedText');

    return $fields;
  }
}


I have copied a snippet from Drupal commerce, where a payment gateway reference is appended to a commerce_order entity (commerce_payment module altering an entity from commerce_order module). 

/**
 * Implements hook_entity_base_field_info().
 */
function commerce_payment_entity_base_field_info(EntityTypeInterface $entity_type) {
  if ($entity_type-&gt;id() === 'commerce_order') {
    $fields['payment_gateway'] = BaseFieldDefinition::create('entity_reference')
      -&gt;setLabel(t('Payment gateway'))
      -&gt;setDescription(t('The payment gateway.'))
      -&gt;setRequired(TRUE)
      -&gt;setSetting('target_type', 'commerce_payment_gateway');

    $fields['payment_method'] = BaseFieldDefinition::create('entity_reference')
      -&gt;setLabel(t('Payment method'))
      -&gt;setDescription(t('The payment method.'))
      -&gt;setRequired(TRUE)
      -&gt;setSetting('target_type', 'commerce_payment_method');

    return $fields;
  }
}


By using -&gt;setReadOnly(TRUE); or -&gt;setComputed(TRUE), you can probably hide them from regular forms, making them behave like properties.