If the variables view shows a variable that is a struct that has MightHaveChildren(), the expand diamond is shown, but if trying to expand it and it's not possible (e.g. incomplete type), remove the expand diamond to visualize that it can't be in fact expanded. Otherwise it feels kinda weird that a tree item cannot be expanded even though it "should".
I guess the MightHaveChildren() checking means that GetChildren() may be expensive, so also do not call it for rows that are not expanded.