Observation très intéressante. Par contre je ne vois pas pourquoi le fait de mettre bout à bout rdx et rax devrait différencier de seulement rax dans un cas ou la valeur est suffisament petite pour être stocké seulement dans rax puisque, comme tu a dit, le reste des bits serons tous des 1 et n'aurons aucun effet sur notre valeur.
J'ai testé avec une multiplication 32 bit pour avoir un résultat final 64 bit edx:eax (ainsi affichable par printf), en fesant encore 4 * -5 avec l'instruction mul, et j'obtiens -20 en affichant seulement eax et -20 en mettant edx et eax bout à bout.
Le concept de signé/non signé ne fait de sens que lors de la lecture de bits. Si on lit non signé, on voit des nombre positif, si on lit signé, on voit négatif ou positif, mais ça n'existe pas lorsqu'on parle de la représentation binaire alors je ne comprend pas pourquoi la documentation décrit les instructions MUL/IMUL comme signé/non signé.