So, I fixed this by writing a new module that creates custom panels panes.
Using the base Panels plugin code seen here http://fourword.fourkitchens.com/article/creating-custom-panels-panes-and-use-substitution-too I created a custom panels pane.
With the custom panels pane, I added a setting for bundles;
$bundles = paragraphs_bundle_load();
$options = array();
foreach ($bundles as $key => $data) {
$options[$key] = $data->name;
}
$form['display_bundles'] = array(
'#type' => 'checkboxes',
'#options' => $options,
'#default_value' => $conf['display_bundles'],
'#title' => t('What bundles should be displayed?'),
);
So when adding a pane in Panelizer, there is a setting for selecting which paragraph bundles are displayed.
Then, when rendering the pane, I check which bundles are allowed and then render them, returning an html block.
$nid = $args[0];
$node = $contexts['panelizer']->data;
if ($node->type == 'article') {
$para_ids = $node->field_nova_section_main[LANGUAGE_NONE];
$para_ids_array = array();
foreach ($para_ids as $delta => $data) {
$para_ids_array[] = $data['value'];
}
$return = '';
$paras = paragraphs_item_load_multiple($para_ids_array);
$idx = 0;
$keys = array();
foreach ($paras as $entity_id => $entity_data) {
if ($conf['display_bundles'][$entity_data->bundle] !== 0) {
$return .= render(field_view_value('node', $node, 'field_nova_section_main', $node->field_nova_section_main[LANGUAGE_NONE][$idx++]));
}
$idx++;
}
}
$block = new stdClass();
$block->title = '';
$block->content = $return;
return $block;
So now, rather than adding the node field to a Panelized layout, I add my custom pane and select which bundles I display.