I spent too much time tracking this one down today, so here’s a note for posterity.
Drupal lets you create “roles” that are essentially permission sets for different kinds of users. One of the permissions in these roles is to allow users to edit content that they authored. I had this enabled for the “content admin” role on my ubuntutips website, but some content admin users were still not able to edit their own posts. What gives?
Turns out that there is a separate dimension to editing permissions, under Input Formats. Drupal allows you to provide different input formatting mechanisms, like Filtered HTML, Full HTML, and Full PHP. Each mode has an associated set of permissions, allowing you to specify which roles can edit each format.
It turns out that previously I had told my content admins to write using the Full HTML format because it supported the <pre> tag, but then later figured out how to add that tag to the Filtered HTML format, and at the same time disabled content admins from editing Full HTML. That meant that if a content admin had create a post in the past with Full HTML, they could no longer edit it, even if they had the “edit own content” permission.
Anyways, the quick fix was to change the content type on the content item in question, and all was well.