My PHP experience is very rusty, but in the example you provided, aren't you just creating a reference variable pointing to the session? In other words,
$copiedSession = $_SESSION;
doesn't give you a "copy" of the session, but just a second variable from which you can reach it.
You want a deep copy.
foreach ($_SESSION as $key => $value)
$copiedSession[$key] = $value
I think that is what you want.
As for better performance, I suspect not. It depends on whether $_SESSION is a pure associative array or if it is a special file-backed map that reads/writes through in real-time.
Judging by the PHP manual's SessionHandler interface, whose read/write methods take a session id and session array, I suspect that $_SESSION is a plain old array which comes from SessionHandler::read and gets passed back to SessionHandler::write.
However, to be absolutely sure, the best way is simply to test it.
You could do reading and writing in a loop say 10,000 times against the $_SESSION variable directly and measure min, max and mean execution time. Then do the same thing against a copy (using the code I gave you above, not the reference pointer code) and compare the numbers.