Can someone explain to me why uname prints out i686 and $MACHTYPE i486?
The uname -m function reads from the machine and reports what the machine thinks/knows of itself --check the machine:
~# dmidecode | grep Family
Signature: Type 0, Family 6, Model 42, Stepping 7
Whereas, to the contrary, every Operating System always seeks maximum backward and forward compatibility, and it usually declares itself to the backward portability: declaring to be compatible to the older earlier architecture rather than the latest; thus, in declaring its environment, it fixes the VARIABLE $MACHTYPE according to its (Operating System's) preferences 4x86 without negating the fact that it is also compatible to the newer architecture 6x86 which generally the user needs not worry. The operating system simply proclaims itself to be compatible to an older architecture; it is a declaration about itself (the OS), not about the current condition of the machine.
Therefore when "echo VARIABLE" is issued it reads from the environment according to the dictates of the operating system (not according to the dictates of the machine) --check the testimony of the operating system:
~# declare | grep MACH
As you see, consistently, the MACHTYPE echoed always bears the distro (debian or slackware) as the sworn witness to that statement, to inform us that it is from the tongue of the OS, not from the machine record.
Hope that helps.