Ds was very similar when he was 8yo. They did all sorts of tests, including MRI scan and concluded... they couldn't find anything other than he had a couple of major allergies (dust mites being one) which were probably irrelevant to what he was going through.
I think he had basically post viral fatigue.
The year he was 12yo was the first year he didn't spend half the time between December and end of February ill. That was last year and I have my fingers crossed for this year now they're not at school.
Fyi approximate time line was:
Early January: Tonsilitis
Mid January, off school about 4 days a week because of temperature and vomiting.
Late January: School suggests he goes half time because he's falling asleep at school
Late January: Put under consultant care at the hospital for ongoing tests (day admissions).
Early February: Unconclusive results, more tests needed.
Late February: Still having regular temperatures and vomiting, but not as tired. Still doing half time school.
After Easter: Trying to do full time school, but missing about 2 days a week with temperature/vomiting. More tests.
May: I took him to the zoo (having missed his school trip). He loves animals and things like that. Noted that we would walk from one cage to another, perhaps 50 yards, then he would need to sit down for a 5-10 minute rest. Went home after 4 hours (normally we'd spend all day) and he was asleep within 5 minutes of getting in the car.
June: Repeat of bloods and further investigations, but generally managing 3.5-4 days a week at school.
July through to November he wasn't too bad. Little extra tired, but did okay, but complaining of a near permanent headache.
November through to March, most weeks only doing 1-3 days as temperature and vomiting.
He continued like that for a couple of years, with being sent regularly for tests. The following year was better, only ill January and February, then last year he only had 3-4 bouts of illness. This year has been even better though he's spent most of mid November onwards isolating so perhaps not a good test.