Just a few ideas:
1) Try putting him down a little earlier at night. It seems counter-intuitive, but sometimes babies sleep better/longer when they are not over-tired. At 3 months, many babies prefer an earlier bedtime. Try 9, then the next night try 8. See what happens.
2)For the startle reflex - consider "Merlin's Magic Sleepsuit." Around 4 months, my DD outgrew her swaddles and just hated to be swaddled. BUT she still had a TERRIBLE startle reflex and needed to be contained somehow. I stumbled across the sleepsuit and it has worked really well. It allows her to stretch her arms and legs (like she wanted) but it's so thick that it muffles her startle reflex and little jerky movements so she doesn't wake herself up. She's still in it now at almost 6 months. She's not big on rolling from back to tummy (awake or asleep), so I don't know how it would work for a baby who regularly rolls over, but it might be worth a shot. They're not cheap, but maybe you could find a used one on ebay or something?