When to store parameters to flash/eeprom of an MCU
There is no 'correct' answer to your question. In the end it depends on the details of the system you have and the level of performance you require. The main points to consider are:


FLASH endurance. FLASH memory can only handle a certain number of writes before it starts producing errors. This can vary significantly between FLASH memory manufacturers (1000 to 100,000 writes) and EEPROM is generally even better (100,000+ writes). If you have more FLASH than you need to store your data, you can also write an algorithm to spread the writes over the unused part of the memory to increase the endurance. In the end you just have to consider how many times the parameters might need to be written over the life of your product and this will tell you whether you can simply write them to FLASH each time they change, or need to use a more sophisticated caching system.
Power supply interruption. If your product has a built-in battery, then you can probably be reasonably sure that it will not get an unwelcome power supply interruption. This gives you a lot of flexibility in deciding when you should write data, and less often would generally be best to avoid any FLASH endurance issues. However many embedded systems do not have this luxury which means you have to decide how important the data is to store, and then prioritise the writing of it based on this. If it is very important then you need to get it to FLASH as quickly as possible. If it is not you could cache it and write it periodically if it has changed. Also note that you would normally need a means to determine if a FLASH write was completed successfully or interrupted by the loss of power. The normal way to do this is to have a final 'validation/checksum' byte that is only written once all the data has been successfully written. On startup, the micro can use this to ensure that the data stored is correct. You can even have a basic journalling system so that the code can wind-back to a previous data set if it detects a problem. How sophisticated your code needs to be depends on how likely it is to receive a power interruption while it is writing data, and the consequences of the data being corrupted.


Regarding the second part of your question (when to read) there is again no 'correct' answer. If performance is an issue and you have spare RAM, then the obvious solution is to buffer the values into RAM. If you don't have enough RAM or performance isn't an issue, then reading from FLASH each time is perfectly acceptable. Also note that on many microcontrollers internal EEPROM/FLASH reads have very little penalty vs RAM anyway.