last_modified is changed when any of the following happens:
- Book record is created for the first time.
- Metadata of the book is changed (this includes cover).
- A new format is added to the book record.
- Format(s) deleted from book record.
- A book format is edited by calibre editor.
- Renaming an item (e.g tag) in the tag browser will update the last_modified column for all books containing the renamed item.
- Deleting an item (e.g tag) in the tag browser will update the last_modified column for all books containing the deleted item.
- Creating/modifying/deleting a custom column will update the last_modified column for all books in library.
- Changing the template for a composite column will update the last_modified column for all books in the library. (There is a way to prevent this mentioned by @chaley but I forgot how to do this)
Edit: if you want more control over last_modified, you can try the
Last Modified plugin which updates custom date column based on selected events.
Edit2: The builtin last_modified has to be this way because it is used to update caches.