I cannot quite manage what you want: the labels keep getting cut off when placed below the image. However, placing the labels to the right of the image does very well.
data = EntityValue[EntityClass["Movie", "StarTrekFranchise"],
{"ReleaseDate", "Image", "Name"}];
movieInfo = #1 -> Labeled[ImageResize[#2, 40], #3, Right] & @@@ data;
Note the entity query above; it gathers all the information from the server with a minimum of calls. Now, with the right options, this can be made quite nice
TimelinePlot[movieInfo, AxesOrigin -> Center, PlotLayout -> "Grouped"]
PlotLayout -> "Grouped"
does not do much here as several of the other layouts do the same thing, but it does a trigger different layout algorithm which works better in tight groupings.
I also like the vertical style
TimelinePlot[movieInfo, PlotLayout -> "ReversedVertical",
AxesOrigin -> Center]
The "Reverse" is needed to have the axis ascending, not descending, and not the lack of "Grouped".