We make a IP_ADD_MEMBERSHIP with imr_multiaddr of group X and
imr_interface address of interface Y. However the resulting
IGMPV2_HOST_MEMBERSHIP_REPORTs come out on interface Y with a source
address of a _different_ interface.

Can anyone explain why this might be?

Is it a problem known to 2.4.31 that is fixed in a later kernel?