I think if I was refactoring cert_sorter I would be tempted to:

- split ComplianceManager into a compliance status data class (ComplianceStatus?) and
the view/controller bits. Then ComplianceManager would have a ComplianceStatus. 

ComplianceManager init wouldn't bind a ComplianceStatus instance, but not call it's .load(). 
CertSorter's init could super().__init__(),  update installed products, then call it' self.load()
to populate the ComplianceStatus.

ComplianceManager.load and _parse_server_status are really constructors for ComplianceStatus.

Main diff between ComplianceManager and CertSorter is where they get the info to populate the compliance model. 

Most of ComplianceManager.is_* stuff is arguably a a view of ComplianceStatus. I'm over simplifying of course. . As is there are really  a couple layers of models (the stuff in load(), the stuff from the cert dirs, the server status, etc).

But I digress...