Hi fx,
vielen Dank für dein Feedback.
Manchmal frage ich mich, wieso ich nicht auf sowas komme, sondern es mir immer komplizierter mache, als es ist.
Meine Zwischenlösung sah etwas anders aus.
Ich habe die Heading Werte in einer Datenbank gespeichert.
Diese habe ich dann beim gerieren der Karte ausgelesen.
Dann habe ich per echo "var icon = new OpenLayers.Icon(‘http://xxxxxxxx.de/rotate.php?deg=$deg’,size,offset); ";
das Icon eingebunden. Die Variable deg entspricht hier dem aus der Datenbank ermittelten Heading Wert.
Die rotate.php:
<?php
$deg = $_GET[‘$deg’];
// File and rotation
$filename = ‘car.png’;
// Content type
header(‘Content-type: image/png’);
// Load
$source = imagecreatefrompng($filename);
// Rotate
$rotate = imagerotate($source, $deg, 0);
**// Output
imagepng($rotate);
?>
**
Klappt super, mit dem kleinen Manko, dass das Icon, was ich eingebunden habe, einen transparenten Hintergrund hat. imagerotate kam aber anscheinend nicht mit transparenten Hintergründen klar und alles, was transparent ist, schwarz dargestellt, was auf der Karte natürlich unheimlich blöd aussah.
Im Gegensatz zu meiner Lösung ist deine Lösung simpel, aber sie funzt, bin ich nicht drauf gekommen, peinlich 
Nochmal vielen Dank für deinen Ansatz 
Boris