I figured out. I just taken out the whole "Style" section from my KML, and let OpenLayers handle the icon and label draw. Even I achieved the rotation! I hope this can help to anyone. If is useful, don't forget to mark as answer, and upvote the question.
JavaScript Code:
var myStyles2 = new OpenLayers.StyleMap({ 'default': {
strokeColor: "#00FF00",
strokeOpacity: 1,
strokeWidth: 1,
fillColor: "#005500",
fillOpacity: 0.5,
pointRadius: 10,
pointerEvents: "visiblePainted",
// label with \n linebreaks
label: "${name}",
fontColor: "#000000",
fontSize: "12px",
fontFamily: "Courier New, monospace",
fontWeight: "bold",
labelAlign: "${align}",
labelXOffset: "${xOffset}",
labelYOffset: +18,
labelOutlineColor: "white",
labelOutlineWidth: 3,
externalGraphic: "${myurl}",
rotation: "${myheading}"
}
});
KML (extract):
<Placemark id="367007000">
<name>Jean Gilbert</name>
<description><![CDATA[<table width = "250px" style="font-size:10px;"<tr><td align="left">Vessel Name</td><td align="right">JEAN GILBERT</td></table>]]></description>
<myurl><![CDATA[http://XX.XX.XX.XX/Icons/Moored/WIG_Moored.png]]> </myurl>
<myheading>45</myheading>
<Point>
<coordinates>-93.7430266666667,29.1617766666667,0</coordinates>
</Point>
</Placemark>