A plugin that does not remember the changes a user made to its settings is open for some optimization IMHO ;-). The concept of either loading/saving only the current active program or the complete set of programs (also called a bank) is something that
is specifically defined in the (native) VST specs. I can think of user scenarios for both.
The VST.NET Framework keeps all Programs and their Parameters in memory, so changes will always be retained unless the plugin is 'unloaded'. A call to ReadPrograms is a direct result of the host calling SetChunk on the plugin. Usually the Get/SetChunk calls
are triggered in the host by user interaction (i.e. menu option).
If you want to make Presets (factory settings that cannot be changed by the user) you have to do some extra work. You have to make sure that calls from the StdPluginCommandStub that change the Program (name, but also SetParameter etc.) will not effect your
Preset Program state.
Notice that I have a todo item for this in the issues list. http://vstnet.codeplex.com/workitem/8957
Hope it helps.