I have found a workaround for this issue.
My solution is to call the following line:
This function works and clears the future access list completely, deleting the corrupt registry key in the process allowing the rest of the methods to work.
The problem with calling this though is that it removes all of my access to any files that i have saved in the future access list. For my application, this means that the next time a user tries to save a file, they end up being prompted again with a file picker to save the file to a location (kind of a forced save as).
Fortunately, I'm able to completely work around this shortcoming. Our application caches all the tokens in the FutureAccessList for our own purposes. By using this cache, i'm able to call into:
Before clearing my list, i load all cached IDirectoryItems into memory.
Now I can clear my list without losing access to any of my files.
After clearing the list, I can go through and add each item back into the FutureAccessList.
Then I simply need to go back through my cache, and update my source tokens with the new tokens and I'm back into a stable state, without losing any future access list.
Note i do think there is something funny going on in the platform here, and somehow the registry is getting corrupted (lastUpdatedTime being deleted), but I can make progress for now.