I've found and fixed the problem.
There are several mistakes in arch/arm/plat-mxc/include/mach/iomux-mx53.h
There is a mistake on almost every TXD_MUX define for all five UARTS such as this:
#define _MX53_PAD_PATA_DIOW_UART1_TXD_MUX IOMUX_PAD(0x5F0, 0x270, 3, 0x878, 2, 0)
In this line, it lists the offset 0x878 for the SELECT_INPUT with a value of 2. The 0x878 offset corresponds to the IOMUXC_UART1_IPP_UART_RXD_MUX_SELECT_INPUT register and assigns it a value of 2 which selects PATA_DIOW for mode ALT3. So when it configures the iomuxing for the TXD line it incorrectly sets the RXD_MUX_SELECT_INPUT to the wrong pin, ensuring that any data on the proper pin will not be received.
The reason that my code works for some UARTs but not others was that in my list of pads to setup, I put the RXD pad before TXD for UARTS 3,4 and 5. For UARTS 1 and 2, they worked because when setting up the RXD pin, it would overwrite the incorrect value from when it setup the TXD pin.
To fix it properly, I have modified my version of arch/arm/plat-mxc/include/mach/iomux-mx53.h
So, for the example above, the #define should have been:
#define _MX53_PAD_PATA_DIOW_UART1_TXD_MUX IOMUX_PAD(0x5F0, 0x270, 3, 0x0, 0, 0)
With no SELECT_INPUT_OFS so that it does not write into the RXD select input. I'm not sure why the RXD has this extra level of muxing when the TXD does not.
This change needs to be duplicated for every TXD_MUX #define in the iomux-mx53.h (for each ALT option, there are 2 or 3 options per UART).
Cheers.