I think checking if anything is changed before updating the command buffer is bad for the following reasons:
- It adds complexity to the codebase. This is not a big problem on its own though.
- Unity post-processing stack rebuilds its command buffer on each frame anyway. So change tracking becomes an overhead in this scenario.
- It is hard to know when objects with outlines become active/inactive without polling their state each frame (the only workaround I see is adding a special components to watch object states).
- It's not always clear when to call
AcceptChanges on layer collection if is is used by several effects.
- Rebuilding a command buffer seems to be relatively cheap operation.