I had a similar problem but this seems to be a usable workaround: Instead of using the table calculator, use "Vector -> Geometry Tools -> Export/Add Geometry Columns...". In this dialog box, use the option to Calculate using "Layer CRS" or "Project CRS", and you will get the correct area. If you use "Ellipsoid" you will get errors similar to the column calculator. This is strange, because the column calculator supposedly uses the Layer CRS, not the ellipsoid.
(After experimenting a little more, I found another workaround: If I use the column calculator on a layer with a lat/lon coordinate system instead of UTM, that also seems to work fine. So, strangely enough, my example below works fine if I use the column calculator to get the area before changing the projection to UTM.)
As background: I am using QGIS 2.14.3. I have a polygon layer that was originally in a lat/lon coordinate system (EPSG:4269, NAD83). I right-clicked on the layer and used "Save As..." to save it in a UTM coordinate system (EPSG:26904 - NAD83 / UTM Zone 4N). Then I created a new project, set it to the same UTM coordinate system and loaded the UTM version of this layer into it. The layer and project dialog boxes and the bottom right corner of the main window all show EPSG:26904.
Then I used the column calculator to calculate area using $area. This gives the right value for about 1/3 of the polygons. But the other 2/3 of the polygons have areas that are too high by a seemingly random factor between 17.9 and 230981.2. This is strange, because a few days ago I performed a similar calculation on a similar layer and had no problem (I think). That may have been done in a slightly different projection or in QGIS 2.12 though. Anyway, the workaround above seems to calculate the right area for all the polygons.
Interesting! I don't usually drag and drop files, but I could add fields to a CSV layer when I tried this. Which feels wrong :)
The changes weren't saved when I committed the changes. I could only get the changes to commit if I saved it as a new CSV file using save as... (Tested on QGIS 2.16.3)
I usually use CSV as a quick way of getting data from python scripts into QGIS, by writing WKT into a CSV. I have to use TAB or pipe (|) as a delimiter because WKT contains commas. If you drag-and-drop you don't get the option to set the delimiter and it assumes commas.
Take a look at the layer capabilities with the different scenarios (use Layer Properties > Metadata and scroll down the Properties section to look for Capabilities)
If you import a delimited layer (with geometry) you should see...
Create Spatial Index, Fast Access to Features at ID, Curved Geometries
If I drag in a CSV file, or import one without a geometry, I see
Add Features
Notice that in both cases, there isn't an "Add attributes" capability. This might explain why I need to save as a new CSV.
The GDAL/OGR CSV driver doesn't allow in-place edits (no 'Add features' or 'Add attributes' capabilities).
I suspect that when you drag in a CSV file without a geometry, QGIS treats it as a text file. If you import a csv and the geometry is recognised, the GDAL/OGR driver is used, and it won't let you make edits.
Best Answer
The $x and $y values only work for point layers.
Create a layer for polygon centroids and then that will give the x and y values using the $x and $y commands.