After some experimenting, I've found a workaround. The following code prompts the user to open/save the image. This makes it printable from IE as well.
Response.Clear();
Response.ContentType = "image/png";
Response.AddHeader("content-disposition", "attachment;filename=print.png");
MemoryStream img = DayPilotCalendar1.Export(ImageFormat.Png, 9 * hourHeight);
img.WriteTo(Response.OutputStream);
Response.End();
It seems that in order to print it properly directly from IE, it has to be a GET request, not POST. This could be done by encoding the current state into the URL. However, the URL length has a limit and I'm not sure if it's worth the effort at this moment.
Another, a bit more dirty solution would be to store the state in the Session under a special GUID and pass just the GUID in the URL.
Both these alternative solutions would need a special method for serialization/deserialization of the control state.