You can use LINQ Aggregate() function (the code is longer than a simple loop):
var result =
input.Aggregate(new List>(),
(acc, s) =>
{
if (acc.Count == 0 || acc[acc.Count - 1].Count == 2)
acc.Add(new List(2) { s });
else
acc[acc.Count - 1].Add(s);
return acc;
})
.Select(x => new KeyValuePair(x[0], x[1]))
.ToList();
N.B.
this works even if your initial input becomes a generic IEnumerable and not specifically a List