Filter based on publish_status, e.g.
$search['publish_status']['$not'] = 'draft';
Entities with no metadata value set for publish_status are not returned, despite a left join value for this field should be 'NULL'.
The key needs to be present for each object for it to display, even if an unset value should evaluate to NULL, i.e. not 'draft'
I suspect this is an artefact caused by joining on a name/value key table, and as a result I can't see a way round it short of rewriting getRecords from the ground up. Mind you, I'm not an SQL expert.