Try with this and see if it works:
userSessionList = userSessionList.Where(u =>
(u.User != null && u.User.FirstName != null && u.User.FirstName.ToLower().Contains(name)) ||
(u.User != null && u.User.LastName != null && u.User.LastName.ToLower().Contains(name))
)
.ToList();
You can also run for testing purposes the following in the same execution and see the results
var userSessionList1 = userSessionList.Where(u =>
(u.User.FirstName.ToLower().Contains(name))
)
.ToList();
var userSessionList2 = userSessionList.Where(u =>
(u.User.FirstName.ToLower().Contains(name))
)
.ToList();
var userSessionListBoth = userSessionList.Where(u =>
(u.User.FirstName.ToLower().Contains(name)) ||
(u.User.LastName.ToLower().Contains(name))
)
.ToList();
And check the three different list. I think that because you are overriding the existing list, it might be that you have done it again in a previous query and that's why you have this weird situation.