I think this won't work because of time zones and how the value is stored in gmt. I have a hunch that when you look at the record it's using your timezone which is correct but when using the list view it's using GMT which would not be correct for you. You would need to update your formula to account for the GMT time.
Also, if your country uses daylight savings you'll have to change the formula twice a year. Also, you're hardcoding the actual days which will only work for the current month it's not dynamic for each month.
I suggest you try to driving from a fixed date in the past and then use MOD to figure out what day it is such as this:
CASE(
MOD(DATEVALUE(Date__c) - DATE(1900, 1, 8), 7),
3, DATEVALUE(Date__c) + 7,
4, DATEVALUE(Date__c) + 6,
5, DATEVALUE(Date__c) + 5,
6, DATEVALUE(Date__c) + 4,
0, DATEVALUE(Date__c) + 3,
1, DATEVALUE(Date__c) + 2,
2, DATEVALUE(Date__c) + 1,
DATE(9999,01,01))
I used to have a formula that calculated when end of day would be for each night. Sorry I can't find it. However, what you would do is take your date time and divide by 1440 or 24 to get the specific unit of time such as minutes in a day then add or subtract to get your timezone offset. then you can say if it's x time that means Saturday night.