When a cookie already exists, and you update it (through the response's Cookies collection), either by adding or updating it, a second 'duplicate' cookie is added to the Request's Cookies collection. This duplicate one is actually the one you just updated.
Although I did not check this on MSDN documentation, I believe this is most probably by design. Why you ask? Because it allows you to get either YOUR current version of the cookie (the one you've just updated/added through the Response), or the one that was actually sent over by the user's browser (which is thus their current version of the cookie at this moment in time).
Now, using either Cookies.Get(name), Cookies[name] or -the way you are doing it- looping through the key collection (from the start) and then returning the first match, will always result in the first cookie beïng returned. This is the cookie as the user still knows it, thus not the one you've been updating during this request.
If you want to retrieve 'your' current version of the cookie, you must get the last one with that name, instead of the first. You can do so like this:
int index = Array.LastIndexOf(this.HttpRequest.Cookies.AllKeys, cookieKey);
if (index != -1)
{
result = this.HttpRequest.Cookies[index];
}
Of course this will also always return the correct cookie if you didn't update it within the current request.