Is there any way to keep it from creating a new list on each startup?
No, not to the best of my knowledge. From the FAQ:
Shuffle modes keep an internal randomized list of tracks in your playlist and play tracks according to their order in that list, so you don't get repetitions until all tracks in your playlist have been played. Shuffle's randomized track lists for each playlist are re-created on foobar2000 restart or when starting/advancing playback with another shuffle mode.
If you are using Album List (DUI) you could add a new View (Preferences -> Media Library -> Album List):
$crc32($directory_path(%path%)) | %album artist% - %album% | [%discnumber% - ]%tracknumber% - %title%
Activate the new view in Album List and send All Music to a new playlist. Start playing from top (Playback order = Default).
This is neither random nor shuffle playback, but you have a specially sorted playlist that plays all tracks in one folder in sequential order and after that it jumps to the next, 'unknown' folder. foobar2000 should remember the position from day to day.
A more sparse version might do as well:
$crc32($directory_path(%path%)) | [%discnumber% - ]%tracknumber% - %title%
or even
$crc32($directory_path(%path%)) | [%discnumber% - ]%tracknumber%
When you have reached the end of the above 'frozen' playlist, you can create differently sorted playlists by adding one ore more chars to the crc32 function:
$crc32(A $directory_path(%path%)) ...
$crc32(X $directory_path(%path%)) ...
$crc32(wow $directory_path(%path%)) ...
$crc32(mother-in-law $directory_path(%path%)) ...
Enjoy.