Vector2 is a struct and therefore a value type. When you return value from list you actually get a copy of the value instead of reference. That is why you can't modify the original value in list.
EDIT: This should work not sure if it is a good way to do it though:
var temp = wormBodyPosition[i];
temp.X += wormBodyWidth;
wormBodyPosition[i] = temp;