As opposed to a compiled executable on a PC where variable storage in ram will be dynamic based on many things and certainly will not be at the same address if a program is closed and re-opened, on the AVR it's "hardcoded"...
Which is even more troublesome. You are now dependent on specific versions of the toolset and the run-time behaviour of your program. A small change to either could leave you in a position where the memory location is used by two independent pieces of code.
Yes I would be at the mercy of the toolset but since this is a specialized one off, not too worried.
As regards the run time behaviour of my pgm, I can also ensure that the variables memory position is not over written.
What I have found is that the compiler is very linear in it's allocation of ram addresses for variables.
I defined a few variables before setup() and found that it pretty much starts allocating addresses at begining of ram.
So if I declare 2 floats then my "check" variable as a byte, the "check" variable will be at offset 9, if I declare 2 floats, an int then the "check" byte, it will be at offset 11 and so on.
You have yet to make any argument against the EEPROM.
Limited number of writes.