Custom form submit handler is called, but node is not saved
As pointed out by @Ismini, the entity has to be saved in the submit handler.  The way to do this is, as pointed out by @4k4, to copy the submit handlers for the new button from the original submit handler.  The corrected code is shown below.

function MYMODULE_form_node_CONTENTTYPE_form_alter(&amp;$form, FormStateInterface $form_state, $form_id) {

  $form['actions']['submit_publish'] = array(
    '#type' =&gt; 'submit',
    '#weight' =&gt; 999,
    '#button-type' =&gt; 'danger',
    '#value' =&gt; t('Submit for approval'),
    '#submit' =&gt; array_merge($form['actions']['submit']['#submit'], array('MYMODULE_draft2submit_callback')),
  );
}

function MYMODULE_draft2submit_callback(array &amp;$form, FormStateInterface &amp;$form_state) {
  // Getting the entity.
  $entity = $form_state-&gt;getFormObject()-&gt;getEntity();
  // Changing the moderation state.
  $entity-&gt;set('moderation_state', 'submitted');
  // Saving the entity.
  $entity-&gt;save();
}