While your point is valid, I think you talking about the extreme case and not the norm. It's true that any changes in the database will potentially affect your positioning but trying to store an entire result set in a session variable is unwise IMO. Unless you have a very small result set, you'll be using a lot of memory to store the session variable. Since session variables are stored in the server's memory, you're putting the server at risk of low resources if traffic is moderate and/or the result set is large.
If you do cache the result set on the first page, you introduce another scenario where the visitor browses through a result set and sees records which may have been deleted and doesn't see records that have been added.
I think it would take a database that fluctuates rapidly for this to ever cause any real problem though. The method I outlined will also auto-adjusts itself for variances in the result set. This ensures you won't ever get an error like trying to display the last record if the result set suddenly became smaller.
If this were being used in a situation where the records changed rapidly and it was imperative that the order not get mixed, I would take steps to ensure the exact start record is maintained and take steps to compensate if that start record was deleted or if records were added, before, after it, etc... That type of solution would really be in the extreme case and what I was posting was for the average scenario.
Take care,
GJ