The problem is that your code does exactly what you ask of it: returns all data.
This is because you have OR conditions which amount to:
(a <= b && c >= b) || (a >= b && c <= b) || (a <= b)
So, if at any time, a < b, the whole condition is true. The first condition is irrelevant because the third will always be true when the first is.
So if you search for a startDate of 26-01-2017, if will automatically match all rows in your sample data, and return them.
If you provide an order - perhaps by c.UpdateDate ascending, you could use FirstOrDefault instead of Where to return a single row, but even then, I think you want to look rather more closely at your condition and probably reduce it to
startDate <= c.Update_Date && endDate >= c.Update_Date