If a user can't edit a node despite having all the right permissions to edit that node, the problem may be that they don't have access to the Input Format (for example, "Filtered HTML", "Full HTML") assigned to that node (that is, the Input Format last used to edit the node).
This problem can arise in several ways:
As a consequence, site administrators should be very careful about allowing different sets of input formats for different roles if all those roles are supposed to be able to edit the same content.
Note: When deleting an Input Format entirely, all nodes that were last edited with that Input Format are changed to the site's default Input Format, and all roles may use the default Input Format. So deleting Input Formats does not cause editing access problems.
Some technical aspects of this issue is explained in detail at http://exodusdev.com/drupal-user-loses-edit-access-to-own-content