In the meantime I found out why this happens: The timestamp used is "normalized" according to the RotateInterval, which means that if you use 86400, hours, minutes and seconds are always set to 0. By setting RotateInterval to 3600 (i.e. one hour), the hour value is set correctly.
It's not intuitive and not documented (in fact the whole filename-pattern replacement is more or less undocumented unless I missed it somewhere), but with this setting it seems to work as I intended in the first place.