The answer that I have found be it correct or not and if anyone has suggestions on how it should be altered do comment.
I took skywalker's suggestion and switched around the params so that id is first.
public function reset($id = null,$resetkey = null) {
and changed my save code
if ($this->request->is(array('post', 'put'))) {
$data = $this->User->findById($id);
$data['User']['password'] = $this->request->data['User']['password'];
$data['User']['resetkey'] = '';
if ($this->User->save($data)) {
$message = __('Your password has been changed, try logging in with your new password.');
$this->Session->setFlash($message);
} else {
$message = __('Something has gone wrong. Please try again later.');
$this->Session->setFlash($message);
}
}
I know it isn't clean and if anyone knows a better way it would be gratefully appreciated.