What is the differece between Make Library Override and Add Library Override?
According to the manual the operator from the outliner ID Data > Add Library (bpy.ops.outliner.id_operation(type='OVERRIDE_LIBRARY)) is for overriding a single data block.


  Single Data-Block Override
  
  You can override a single data-block from two places:
  
  
  The Outliner (it’s in the context menu of IDs), in which case all local usages of that linked ID will be remapped to the new local override.
  
  
  [...]


On the other hand Object > Relation > Make Library Override (bpy.ops.object.make_override_library()) iterates through the hierarchy of objects and collections based on the selection, overriding everything linked.


  Make Library Override Operator
  
  This one operates in the 3D View, over linked objects or local empties instantiating a linked collection (typically, a linked character). It is very similar to the Make Proxy operator, and is found in the same sub-menu Object ‣ Relations ‣ Make Library Overrides….
  
  Unlike the method described above, it will go through the whole hierarchy of collections and objects, and override all those needed to allow posing/animation of a character.
  
  Note
  
  Proper Collections Layout Matters
  
  For this operator to work properly, it is crucial that all the collections needed by the character are children of the root (linked and instantiated) one. Otherwise, some won’t be automatically overridden, and manual work will be needed to fix the override.