But, if I stop and start again, it has cleared the EEPROM and uses the default values.
Any thoughts on why this is happening?
So, first step is to post some simple code which demonstrates the problem and let others confirm or not confirm what you see.
If it can be confirmed that there is no problem with your code, and other people can use it and restart with preserved values, then there is possibly a problem with the fuse settings on your processor.
Which Arduino are you using? What is its history? Are you loading your programs with USB serial, or are you using ICSP?
[EDIT: Differentiate between icsp and bootloader for fuse issues.]
In the 8 bit processors, the "high byte fuse" has a setting for EESAVE which preserves the eeprom through a chip erase if you are loading code with the ICSP. It does not matter if using the bootloader and loading the sketch with usb.
If your problem can be confirmed, and you are using the ICSP and not the bootloader, you will need to reprogram the fuse settings.