Try to see if this makes a difference:
$user = (clone) $this->getServiceLocator()->get('User');
The service manager will only provide you with a new instance each time if you specifically tell it to
http://framework.zend.com/manual/2.0/en/modules/zend.service-manager.quick-start.html
Note the part about shared services. This would tell the service manager you want a new User object every time, then you will not need to clone the object as above
'shared' => array(
// Usually, you'll only indicate services that should _NOT_ be
// shared -- i.e., ones where you want a different instance
// every time.
'User' => false,
),