Chicken jockeys spawned with no nearby chickens can have the chicken despawn, which is normal. However, when a baby zombie mounts an existing chicken, the chicken gains the ability to despawn, causing the existing chicken population to slowly decay if left untouched. This is probably caused by the IsChickenJockey tag being activated for existing chickens when zombies mount them, which doesn't need to happen, because zombies can still control chickens without the IsChickenJockey tag.
How to replicate:
1. create a new world in creative (super flat is best)
2. Spawn in a regular chicken
3. Spawn a ton of zombies (command blocks with a fast redstone clock is best) until a baby mounts the chicken
4. Get rid of all the zombies
5. Teleport 128 blocks away from the chicken
6. the pre-existing chicken will have despawned
This is a good thing in my opinion and is probably intentional.
Since chickens can be gotten in other ways than normal animals, (by eggs and jockeys), its not a big deal if some of them despawn. They are easy to get back if "needed".
A much bigger problem is when you have lots of chickens laying eggs around zombies making the zombies not despawn.
On our server we have "kill on sight" on all chickens we see due to that it causes lagg and reduced mob spawning everywhere.
(The problem with zombies holding items not despawning is another issue though, but a bit related to this. A fix of that would be to have zombies with items have a 10x as long despawn timer as normal mobs instead of an infinite despawn timer. This would also increase the use for name tags.)