Back to the specification of RS-232
RS-232 defines the idle condition as steady MARK. This is -3 to -15 volts AT THE CONNECTOR. Likewise SPACE is a positive voltage of +3 to +15 AT THE CONNECTOR. In contrast, PIC 'idle' is almost always assumed to be 0 volts.
These high(ish) interface voltages are well beyond TTL levels and so an Interface Converter or Line Driver is frequently required such as the older 1488 and 1489 or the newer MAX-232 family. Line Driver chips also serve for electrical protection of the PIC from outside interference and are usualy socketed on the circuit baord for easy replacement as they get zapped fairly often.
Line drivers/interface converters are all INVERTERS. So this means the levels at the PIC are now the opposite of what you mention in your first post. MARK, which was a negative voltage at the connector becomes +5 volts at the PIC. SPACE becomes 0 volts at the PIC.
SERIN allows selection of 'true' and 'inverted'. You use 'true' when you use a line driver or max-232, otherwise use the 'inverted' setting when you have no interface chip in line. HSERIN and SERIN2 expect you to use an inverting interface chip IF you are going to the outside world via an RS-232 connector.
For short distance or internal PIC to PIC comms you can dispense with the line drivers but you will probably get errors in the first character when sending between PICs at TTL levels.
To eliminate these errors all you have to do is condition the interface to 'mark' with a positive voltage long enough for a character time. You only need do this at the start of each message or you can ignore this issue and simply add a few throwaway characters at the start of every message. I find it better to add the HIGH xxx : PAUSE n and get every character every time.
Try using
HIGH TxDpin
PAUSE 1
and then output your message such as..
SEROUT/HSEROUT/SEROUT2 TxDpin, message
HTH
BrianT