join now allows merging of MultiIndex DataFrames with partially matching indices.
Following your example:
df1 = df1.join(df2, on=['Body','Season'])
make sure the on columns are specified in exactly the order that match the Index of the other DataFrame as the on argument matches the order you specify the labels of the calling DataFrame with the Index as it is in the other DataFrame you join to.
or just join without using on and by default it will use the common index levels between the two DataFrames:
df1 = df1.join(df2)
Resulting df1:
A B Mood
Body Season Item
sun summer one -0.483779 0.981052 Good
winter one -0.309939 0.803862 Bad
two -0.413732 0.025331 Bad
moon summer one -0.926068 -1.316808 Ugly
two 0.221627 -0.226154 Ugly
three 1.064856 0.402827 Ugly
winter one 0.526461 -0.932231 Confused
two -0.296415 -0.812374 Confused