I finally figured it out.
It's nothing to do with PHP5.3.
When the extension is first installed, the entries for each of the plugins are made in the jos_plugin table with the value of the params column set to null. When JPlugin loads a plugin, it only creates a params property if the value passed in $config is not null. When the plugin has been edited in the backend (or just saved without any change to the settings), the value of the params column is set to a value and the params property is created correctly. A short term fix is to open all of the plugins and click the 'save' button to populate the params column in the jos_plugins table. A proper fix will be to cater for the possibility of this occurring and allow for it. What worked for me was changing
parent::__construct($subject, $config);
to
parent::__construct($subject, $config);
if (!isset($this->params)) {
$this->params = new JParameter(null);
}
in each of the plugins