One thing that does occur to me is that for a 2+ year old, he is still having quite a lot of milk. My DS has never drunk cows milk - he stopped having neutramigen at 2 and wouldn't drink cows milk although he does have it on cereal. Our dietician was happy that he got enough calcium elsewhere in his diet so it didn't matter. I wonder whether your DS has the oats milk and is then too full. For example, if he has milk mid afternoon, he probably then won't want to eat his tea.
An average day for my DS would be:
Breakfast - 8am - weetabix and special k with milk, sometimes a fruit smoothie or piece of toast too
Mid morning - snack, fruit (at nursery)
Lunch - sandwich, snack (ie today he has a slice of pizza, or it might be hummus and breadsticks, or a mini piece of cheese) and a piece of fruit and a fromage frais
Tea - 5.30pm - whatever the rest of the family has, so for example homemade chicken curry and rice, or spaghetti bolognese, or fish fingers and mashed potato, roast dinner etc. For pudding, usually fruit, or perhaps something like a mini trifle as a treat.
Bedtime - yogurt (extra calcium and he has his reflux medicine mixed in with it)
DS is on the leap study so his diet has been analysed by the dietician on the study and they were happy that he was getting a balanced diet nutritionally.
It seems to me your DS has lots of milk and lots of snacks and then doesn't eat his main meals. Does he not have any cereal at breakfast?
Like I said, my DS eats all that and is still under the 2nd percentile for weight, so I would try not to worry too much, but if you want some little changes that might help, I hope these suggestions are useful.