After upgrading TVirtualStringTree from version 5.3 to version 7.4 I am getting 2 images on each node.
The OnGetImageIndex event is pretty straightforward :
procedure TvTreeControl.vTreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
var pNode : PNodeRec;
begin
ImageIndex := -1;
if Assigned(Node) then
begin
pNode := Sender.GetNodeData( Node);
if pNode.NodeData <> NIL then
ImageIndex := pNode.NodeData.ImageIndex;
end;
end;
Any suggestions or ideas on what to look for would be greatly appreciated.

I am not completely sure why, but this code fixes the issue.:
Skipping the ImageIndex assignment when Kind = ikState prevents the second image from showing up. This was not necessary in the earlier version.