To answer the specific question of "why" the corners lift off, it seems it has to do with the thermal expansion (or shrinkage) and surface adhesion area.
The material is deposited hot, and even after it cools is still warm, and as it cools it apparently shrinks in size slightly. Each layer therefore produces a little bit of force, pulling upwards and towards the center of the layer as the layer shrinks. So each layer is actually in a state of slightly tensile stress.
Over a few layers this may not cause a noticeable effect, but as more layers are added, the total force pulling on the bottom layer increases.
The reason this affects corners more than the bulk surface regions is that the total surface area holding the part to the bed is smaller at sharper corners, so less force is required there to overcome the bed-adhesion force, causing corners to unstick eventually.
Since this is an artifact of thermal expansion, attempting to maintain a uniform temperature across the print volume/printed part will probably help a lot (for example, by enclosing the printer, as others have said).
In addition to the prior suggestions, the following paper suggests that chamfering (rounding) the corners can help with this (if your design allows for that):
D. D. Hernandez, "Factors Affecting Dimensional Precision of Consumer 3D Printing", Intl. Jnl. Aviation, Aeronautics and Aerospace (2015)
"If the bottom layer does not appropriately adhere to the print bed, the cooling process and material shrinkage in layers above it will tend to pull at the smallest features, with the least surface area in contact with the bed, causing sections of the print to warp. Sharp corners at the bottom of the print pose a particular problem."
Side-thought:
I wonder if varying the bed temperature during the print (for example, slowly decreasing it to room-temp as more layers are printed) would help, since a constant bed-temp would theoretically produce a vertical temp-gradient for a very tall part. Don't think I've seen anyone try that (presumably because Cura doesn't automatically insert those g-code commands for us). Wouldn't be too hard to insert custom bed-temp commands throughout the g-code file though, but would take longer to temp-stabilize between layers.