Two cups of food a day for a 4 month old puppy is not very much, regardless of brand. I agree with switching to a higher quality food, but I'd also increase the amount of food at each meal.
Being ill when younger could certainly set him back temporarily, but he should catch up if he's healthy now, and getting an appropriate amount of food.
As far as the poop eating, the only 100% sure way to stop that is to go outside with him every single time, and clean up the poop immediately. Halo is 5 years old, and still a determined poop eater. I've tried mixing things into her and Keefer's food, but it didn't work at all. If she had access to it, she still ate it.