The problem is simple: you only create one instance of a room - but then you change the data within it:
RoomInfo _RoomInfo = new RoomInfo();
foreach (var roomitems in lstRooms)
{
_RoomInfo.Checkin = CheckinDate;
...
lstRoomsNew.Add(_RoomInfo);
}
So when you look at your collection, you see the same data twice.
Move the instance creation inside the loop:
foreach (var roomitems in lstRooms)
{
RoomInfo _RoomInfo = new RoomInfo();
_RoomInfo.Checkin = CheckinDate;
...
lstRoomsNew.Add(_RoomInfo);
}
And it'll do what you want - because now you create new rooms for each set of data.