Pip replaces underscores with dashes. So when the name of a package is for example my_package, pip will display it in the list command as my-package. IsInstalled will not find it and returns false.
I would recommend to make a small change to use dash for pip instead of underscore in PyPackage.Manager.Pip.pas:
constructor TPyPackageManagerPip.Create(const APackageName: TPyPackageName);
begin
inherited;
FDefs := TPyPackageManagerDefsPip.Create(APackageName.Replace('_', '-'));
FCmd := TPyPackageManagerCmdPip.Create(FDefs);
end;