I think List.Exists() is what you are looking for.
Position.Exists(c => c.used)
Edit: I think you'll need a for loop before the if statement that records if there are any overlaps.
bool overlap = false;
for (int i = y; i <= y + bat.Size-1; i++)
overlap = overlap || Position.Exists(c => c.y == y && c.x == x && c.used);
After that, use overlap in the if condition.
Edit: I made a mistake with the loop.
bool overlap = false;
for (int i = y; i <= y + bat.Size-1; i++)
overlap = overlap || Position.Exists(c => c.y == i && c.x == x && c.used);
What this code is doing is that it checks if any space that your boat needs is already in use and records if it is. If it's easier for you to read, this is the same as the above:
bool overlap = false;
for (int i = y; i <= y + bat.Size-1; i++)
if (Position.Exists(c => c.y == i && c.x == x && c.used))
overlap = true;
Also, this code should be inside case 2 and before the if statement.