[eluser]TheFuzzy0ne[/eluser]
The session data is pulled once for each request, and updated each time you call $this->session->set_userdata().
There are two solutions I know of to get around this:
1) Make sure you update all of your userdata in one go.
2) Create a post controller hook that will update your session once your controller has finished executing. The only problem here is that occasionally, you will echo out some data and exit immediately, which will mean your hook won't ever get called.