The ability to switch a theme is largely going to depend on whether or not you have declared a particular resource as a StaticResource or a DynamicResource. Suppose you have defined a brush colour as a StaticResource. When the application starts up, that resource is going to be baked in for the duration of the application lifetime, and can't be switched. If it's a DynamicResource, then reloading it results in the brush colour changing.
While
this[
^] is an old article, it should still hold true today.