Also note that in properties

Change value itemupdating

In your case, access instead the current web by using properties. So first we need to check for that. What you want to update is properties. It's not about declaring specialItem it's about setting a property on the current list item.

Of course, if both the ListItem and the AfterProperties lack the column, it hasn't changed either. Usually strings will do just fine. AllowUnsafeUpdates lightly as it exists to protect against vulnerabilities.

So first we need to check

You can use that to get your prior values. If you do it in ItemUpdating, it wouldn't be available in ItemUpdated so you would be stuck with the same issue. For more information about how to handle events, see Handling and Raising Events.

It allows me to use the current items property bag and nullifies the key each time so it doesn't retain the value. It is not your case in the code you show, you should be able to directly edit properties.

When the CommandArgument property of the Update button is set, use the CommandArgument property to determine the value of the command argument. That property contains the original values, and are for reference only not saved back. If you need to access the original non-key field values, use the OldValues property.

ListItem in the ItemUpdating event. You can also read or modify the new values entered by the user by using the Keys and NewValues properties. The command argument value corresponds to the CommandArgument property of the Update button. To cancel the update operation, set the Cancel property to true.

So if you want to test if a specific column was changed you have to use the ItemUpdating instead of the ItemUpdated eventreceiver. If you follow the link he uses you'll see the table for lists he uses is different from the one he references. If you try to do it before both events, you would have your properties yet to access the list items. If so, indeed the best way to do it is to add a hidden bit column, or an int column if you want to cheaply store changed flags for several columns. The Keys property contains the key fields, while the NewValues property contains the non-key fields.

Test and set in the ItemUpdating, then read in the ItemUpdated. Also note that in properties.

In your case access