I did exactly the same but we were wrong in the usage of #limit_validation_errors.
The reason why this is failing is that we're not using properly #limit_validation_errors. This issue has nothing to do with Workflow.
During the form validation, if this property is set (validation errors are limited), Drupal core will remove any non validated form values from the form state, so only values that passed validation will be left for submit callbacks.
For Drupal 8:
http://cgit.drupalcode.org/drupal/tree/core/lib/Drupal/Core/Form/FormValidator.php#n147
For Drupal 7:
http://cgit.drupalcode.org/drupal/tree/includes/form.inc?h=7.x#n1193
My solution was to add a custom validation that will be executed at end of all validations, and in there remove all form-related errors:
/**
* Removes all validation errors that could happen when saving a draft
*
* @param $form
* @param $form_state
*/
function my_custom_draft_validation($form, &$form_state) {
$errors = form_get_errors();
if (!empty($errors)) {
$messages = drupal_get_messages('error', TRUE);
// Remove error messages originated during the form validation
foreach ($messages['error'] as $error) {
if (!in_array($error, $errors)) {
drupal_set_message('error', $error);
}
}
// Remove all form errors
form_clear_error();
}
}