In code, only create a revision if a field is changed
This may do the trick in a hook_entity_presave(), or get you close:

$old_dog = clone $dog;
update_the_dog($dog);

// Use == to allow for out of order keys.
$same = $dog-&gt;toArray() == $old_dog-&gt;toArray();


This is kinda of cheating, and you may want to filter the arrays for just the fields and not the properties.  It also isn't multilingual-safe.

To do it properly, start reading ContentEntityBase::hasTranslationChanges() and FieldItemList::equals().  The code above makes a lot of assumptions about fields and storage, which ContentEntityBase() does properly.