ハマったポイント
オブジェクトは参照型なので、代入した際に代入先で値を変更すると代入元の値も変更されてしまう。
$user = new User();
$user->name = '太郎';
$user2 = $user;
$user2->name = '次郎';
$user->name; // 次郎
$user2->name; // 次郎
結論
clone
を使う
$user = new User();
$user->name = '太郎';
$user2 = clone $user;
$user2->name = '次郎';
$user->name; // 太郎
$user2->name; // 次郎