Multistep form makes same submissions
You have picked up correctly, the root cause for this issue is the object_id used by ctools multistep form, which is being generated per session. And for different tabs in a browser, we have the same session. So basically we need to figure out a way to get different object_id for each tab. This can be done in two ways:
1. Modify session mechanism to have a different session per tab. (Difficult)
2. Use query_parameters to handle two different requests. (For eg: time as id)

So, using 2nd way to solve our the problem:
Get object_id dynamically.

$object_id = _module_get_object_id();


Ensure if id exists in URL, else return newly generated id.

function _module_get_object_id() {
  $params = drupal_get_query_parameters();
  if (isset($params['id'])) {
    return $params['id'];
  }
  else {
    $params['id'] = time();
    return $params['id'];
  }
}


and most important step, for adding id in URL as query parameter we need to add following code in the ctools_multistep_wizard_next function:

drupal_goto($form_state['redirect'][0], array('query' =&gt; array('id' =&gt; $form_state['object_id'])));


Reference: http://savaslabs.com/2015/06/23/implementing-ctools-multi-step-form-block.html