I've just confirmed this with a breakpoint in my Browse() method. I open the "Project Settings" dialog, summon my dialog for my provider, inspect the list of entries in the breakpoint, continue and cancel my dialog. Then I remove a provider, and repeat - the number of items in settings.Entries is the same as it was previously.
This makes sense - the documentation says:
"SDL Trados Studio 2017 persists the translation provider list by persisting the Uri and state information. In order to display the list of translation providers in the user interface, SDL Trados Studio 2017 does not necessarily instantiate all the translation providers. For this reason, the UI component also needs to be able to provide display information, given a certain translation provider Uri and state. This way, the translation provider UI component has the possibility of generating this information in a more lightweight way then by instantiating the translation provider itself, which might for instance involve connecting to a server, etc."
So it doesn't surprise me that Trados isn't actually creating (or removing) a translation provider entry until the user presses "OK"; but it also means that I can't use your method to get the contents of the list of providers as the user sees it.
That's basically what I'm doing (I'm iterating over settings.Entries rather than calling ToList(), but that shouldn't make any difference, I don't think). The problem is that this list isn't updated when I select a new provider until the user presses "OK" in the Project Settings window to dismiss the window. It's also not updated when the user removes a provider until the user presses "OK".