I noticed that I have to force a refresh via 'package-refresh-contents' after changing either 'package-archives' or 'package-pinned-packages' as 'package-menu--refresh' accounts only for changes to 'package--old-archive-priorities'.
If agreed, I'd be happy to submit a patch so that package.el will honor changes to variables in between refreshes, and "invalidate" the implied cache.
-Stephane