This is essentially the same problem as discussed in [this][1] thread. If you have already migrated to Customer Communities, this issue is already fixed by Salesforce so you should not get the above error. If not, you have a couple of options

A) Create a wrapper class of the fields you need, query the contact by id, and let the customer edit. Then take the wrapper and write back to the contact (certified to be working by the submitter for original thread)

B) Get a different license type like Service Cloud portal, Customer Community for read access to contact and Partner Community for full CRUD on Contacts (in addition to the full sharing model).

  [1]: http://salesforce.stackexchange.com/questions/16835/give-high-volume-customer-portal-user-access-to-their-own-contact-records