Just got a reply from Simon Welsh, the author of the Embargo/Expiry Module. Thanks Simon that's a HUGE help.
It's to do with the BlogHolder not checking canView() on each of its children that it displays. I'm basing this off of the 0.2.1 release of the blog module.
In blog/code/BlogHolder.php, find (in the Entries method in the BlogHolder class):
return DataObject::get("Page","`ParentID` = $this->ID $tagCheck $dateCheck","`BlogEntry`.Date DESC",'',"$limit");
replace with:
$items = DataObject::get("Page","`ParentID` = $this->ID $tagCheck $dateCheck","`BlogEntry`.Date DESC");
$newSet = new DataObjectSet();
foreach($items as $item) {
if($item->canView()) $newSet->push($item);
}
if($limit) {
list($start, $length) = split(' *, *', $limit);
if(!$length) {
return $newSet->getRange(0, $start);
}
return $newSet->getRange($start, $length);
}
return $newSet;