I've managed to find a fix. No idea why this seems to work though when heatmaplayer.redraw() doesn't.
For the benefit of others:-
this.map.setCenter( new OpenLayers.LonLat(lon,lat).transform(
this.transformWgs84, this.map.projection), zoom,true,true);
the second 'true' did the trick. According to the OpenLayers docs this should just force a zoom change. It seems to also force a heatmap layer redraw. (The first true parameter forces drag events)
Docs: http://dev.openlayers.org/docs/files/OpenLayers/Map-js.html#OpenLayers.Map.setCenter