POSIX uname defines -m but not -i. -m outputs the machine name as returned by the uname(2) system call, in the machine entry of the utsname structure. The possibles values are implementation-dependent; on Linux systems it's the kernel's architecture (x86_64, i686...), and can be modified by the process’ personality.
To get an idea of the variety of machine names used, check out config.guess: the first element of each set of values is a machine name, and you'll see macppc, alpha, Alpha, 21064...
GNU coreutils' uname defines -i as outputting the hardware platform name, if it can be determined. To understand what that means you need to look at the source code. If the system uname was built on supports sysinfo(SI_PLATFORM, ...) (which the autoconf macro claims is POSIX, but I haven't been able to verify that), then the hardware platform returned there is used. This works on SunOS and Solaris for example, but not on Linux. If sysinfo isn't usable, the sys/sysctl.h include is checked for HW_MODEL and HW_MACHINE_ARCH, and if they're both defined then the model given by sysctl() is used instead. This works on some BSD-type platforms.
In summary both values are implementation-dependent so it's hard to ascribe real meaning to them.