First thing first. Good on you for adopting a high energy breed and giving him a good home. That is commendable, especially if you do not read the benefits of the breed from hunting him.
The first picture where the dog is on point, it actually looks on the heavy side of acceptable for the breed to me. In the second picture he certainly looks on the skinny side, but not insanely thin. I have seen more than one dog start the hunting season like the first picture and end the hunting season looking like the second picture.
Second: you say you let him roam outside most of the day but that he definitely isn't doing 15 to 20 miles a day. I do not know what amount of acreage you are letting him run, but if he is free running on a lot of ground and has much prey drive, and is out there for more than three hours a day, I think you are severely underestimating his mileage. For both my shorthairs, 15 to 20 miles happens in less than an hour in thin cover and in 1.5 hours in moderately thick cover. This is as measured by a GPS. My dogs are bred towards the foot hunter and are low speed by comparison to the horse trial bred dogs. Not all pointers are bred to run wide open full throttle all the time, but many are. Obviously you know the duration, acreage and his run better than us, but the breed was bred to run and a 3 year old dog is going to do just that. If you strapped a GPS collar on him, I think you would be surprised to realize the mileage he is actually doing.
My number one suggestion is to reduce the frequency of your feeding for a few reasons. I prefer once a day at night. If you do twice a day give him 25% in the morning and 75% at night.
Pointers are not the worst breed for stomach twist/bloat but they are deep chested dogs that have an increased risk. Feeding within a couple hours of exercise increases risk of bloat. For this reason alone, I would cut out the middle meal.
Frequent feeding may also be interfering with nutrient absorption. It is common for dogs to dump their bowels when they run. It takes a dog 10ish hours to fully process food. If you are feeding 2/3rds of the food before he is done exercising for the day there is a very good chance the dog is excreting the food before having a chance to absorb the calories out of it. On top of that when dogs exercise with a full bowel they can get the squirts and irritate their bowels. Having irritated bowels will further inhibit nutrient absorption.
Is he fixed or intact? This will effect his metabolism which in turns changes the amount of feed he needs. If I were in your shoes, the first change I would make is in his food. Provide 75+% of it at night after he has settled in. This will allow him to sleep for 10 hours and fully digest his food before he gets up and runs the next day.
Pay attention to his stools. If they are loose there is something going on with his digestion system. This could be worms, giardia etc. but it can also be as simple as feeding him to much or him getting to much exercise with food in his system. A dog with poor stools does not have a proper working digestive system for some reason and is not going to absorb all of the nutrient as a consequence. Not absorbing nutrients will inhibit weight gain.
I would also start limiting his exercise. Run him for two hours a day off leash. See if his weight stabilizes.
Best of luck to you and your buddy.