Success! Kind of, for half of it.
I'm able to receive data, but only under certain situations. If I use "cat /dev/tty.iap 9600" in SSH and then turn on my Arduino, I just get a bunch of question marks. But if I use "cat /dev/tty.iap 9600" after the Arduino sketch has already started, I get the expected result.
Does anyone know a way around this? Or even why it's happening? If anything, I'd think it wouldn't work using the "cat" command after the sketch started, but would before, so it seems counterintuitive to me. It's not really a big deal, since in most if not all cases the sketch would be running before the iPhone does anything, but I don't even understand why this is the case.
Both "cat /dev/tty.iap 9600" and minicom work fine for me. Although minicom only works on my Mac from SSH. Windows SSH (with the terminal built into WinSCP anyway, which is probably the cause) doesn't work, complaining about no "cursor movement capability". On the iPhone itself in the Terminal app from Cydia, I'm not sure how to use the setup screen since you need arrow keys to navigate it. In the options for Terminal you can set gestures to arrows, but for some reason that just exits the program before I can change anything. If anyone can find a way around that, great, but if not, you can always use SSH to create a config file (port is /dev/tty.iap, baud rate is 9600, and turn off hardware and software flow control), then safe it, then load minicom from Terminal, logging in as root first (do "su -l root", password is alpine), then it should work. 
As for sending data to the Arduino, I haven't tested anything yet. I don't see why I couldn't do it though.
Also, the logic level converter is completely useless in this circuit... The Arduino digital pins only appear to put out 2v, not 5, so you don't need to do anything with voltage. Just a single 1k ohm resistor between the Arduino's TX and iPhone's RX and you're set.