If your pool has multiple nodes, try doing a ping test on all of them, and seeing which one is faster. Usually this is the one that's geographically closer to you. Manually set that node as your first priority.
Example: Middlecoin has 5 nodes (uswest, useast, eu, amsterdam, & asia). Here are my ping times:
Useast: 50ms
Uswest: 103ms
ud: 132ms
amsterdam: 98ms
asia: 264ms
I'm on the eastern seaboard of the USA, so obv I set useast as my main pool. It would actually be better for me to connect to the amsterdam node as a backup than the uswest.
Second, change how cgminer communicates with your pool. Set your Expiry to 10, Scan-time to 5, and Queue to 0. See This Thread on a conversation about rejects. I know it's for middlecoin, but those settings are pretty much true for all alt-coins. Changing these can have a HUGE affect on your rejects.
Lastly, dropping your I can also decrease your rejects. If the drop in rejects is higher than your drop in hashrate, it's a net gain. What I mean is if you move from I:20 to I:19, and lose 2% of your hashrate, but your rejects go from from 5% to 2%, you just netted a 1% gain in payouts. Watch the results and see if it's worth it for you.
Thanks a lot - I will try all of your suggestions.