According to the below explanation, you need to call ExecuteQuery()
to take effect of Update()
call.
To set most list item properties, you can use a column indexer to make an assignment, and call the Update() method so that changes will take effect when you call ExecuteQuery() or ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler).
Source: Updating a list item.
Try your code like below:
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
SPListItem listItem;
...
listItem["MyCol"] = " "; // Space character.
Console.WriteLine($"listItem[\"MyCol\"] = {listItem["MyCol"]}"); // Here i see the space character.
listItem.Update();
clientContext.ExecuteQuery(); //Call this method before writing the value to Console.
Console.WriteLine($"listItem[\"MyCol\"] = {listItem["MyCol"]}"); // Here value is became null.
MyCol
??