That says the internal variable name is preserved but while it still has the 'eem' class the name is reported differently.
That is presumably because you defined a 'names' function for objects of class 'eem' which returns the contents of $sample as the name, not "sample". Looks like str is using your names.eem method to extract the name of each component of your object, which is kind of what redefining 'names' asks for. And just to demonstrate that str does indeed use the current class's names method:
names.eem <- function(x, ...){ "AnotherName"}
str(test1)
# List of 1
# $ AnotherName: chr "justaname"
# - attr(*, "class")= chr "eem"
So it isn't your '<-', it's because you overrode 'names'