The flash memory is a non volatile memory where the code is stored, the code that is executed, you can't write to the flash memory from your code, any change you do to variables is stored in RAM and is lost when the mcu restarts.
The eeprom is a small non volatile memory space that is available to the user to store any data that should be preserved between restarts, you can store/restore/delete data there at any time from your code or even from an external programmer (usefull to read/write specific initial setting).
The eeprom usually stores some settings that are changed while the code is executing and should be preserved.
Alex