How to programatically submit an entityform?
I don't think you can submit entityform using drupal_form_submit() as it's entity, not a standard form.

The best way is to save the entity as you did, but you are missing field_attach_submit which is necessary to perform operations on field data submitted by a form.

The syntax is:

field_attach_submit($entity_type, $entity, $form, &amp;$form_state, $options = array())


Example based on given $form_state:

$form_id = $form_state['build_info']['form_id'];
$entity = $form['#entity'] ?: $form_state['build_info']['args'][0];
$entity_type = $entity-&gt;entityType();
$entity_info = entity_get_info($entity_type);
$entity_values = drupal_array_get_nested_value($form_state['values'], $form['#parents']);
list(, , $bundle) = entity_extract_ids($entity_type, $entity);

// Copy top-level form values that are not for fields to entity properties,
// without changing existing entity properties that are not being edited by
// this form. Copying field values must be done using field_attach_submit().
$values_excluding_fields = $info['fieldable'] ? array_diff_key($entity_values, field_info_instances($this-&gt;entityType, $bundle)) : $entity_values;
foreach ($values_excluding_fields as $key =&gt; $value) {
  $entity-&gt;$key = $value;
} 
if ($entity_info['fieldable']) {
  field_attach_submit($entity_type, $entity, $form, $form_state);
}
$entity-&gt;created = isset($entity-&gt;is_new) ? REQUEST_TIME : $entity-&gt;created;
$entity-&gt;changed = REQUEST_TIME;
entity_save($entity_type, $entity);


Alternatively you can submit entity form by using entityform_save(), e.g.:

$form = new Entityform(array('type' = 'my_entitty_form', 'language' =&gt; LANGUAGE_NONE)); 
$form-&gt;field_entityform_1 = array(LANGUAGE_NONE =&gt; array(array('value' =&gt; 'field_1'))); 
$form-&gt;field_entityform_2 = array(LANGUAGE_NONE =&gt; array(array('value' =&gt; 'field_2' ))); 
$form-&gt;uid = 1; // this is the form id 
entityform_save($form);


Source: sushantpaste's gist