As a result of a penetration test against some of our products in the pipeline, what looked to be at the time an \'easy\' problem to fix is turning out to be a toughy.
Have you considered using the HttpSessionState.Abandon method? That ought to clear everything. Then start a new session and populate it with all the items you stored from your code above.
Session.Abandon();
should suffice. Otherwise you could try to go the extra mile with a few more calls if it's still being stubborn:
Session.Contents.Abandon();
Session.Contents.RemoveAll();