I consider myself still very much a beginner (though I've been at it for about 2 years now) so I can't give any definite "best practices". What I've come to find, though, is that it depends a lot on how you structure your project and what works best for you in any given situation.
I actually use a mix of different methods for it, depending on the data I need carried over.
I use globals for basic variables that get accessed a lot, because it is easy to add in a state...
... for example an xml file that carries all the data on prerequisites for random events to fire
I use dontdestroyonload objects with arrays/hashtables that carry larger amounts of data that get populated dynamically
... every event has its on xml file with its contents, what texts/images to display etc. couldn't do that with either local nor global variables
And I use easysave save/load for the game settings and new game setup, just because I was getting into es2 at the time I made the settings/game setup menu... still works perfectly fine.
I think the important part is finding a method that works for you and your project and stick to it. I've mostly gone with a focus on ease of access during game creation and so far I've seen no downside in regards to performance or whatnot.
But as I said in the beginning, still very much a beginner imo, so take with a grain of salt.