particle command's xd/yd/zd variables are double what you set them to
Screenshot below shows xd set to 1, 2, 3, 4, 5. But they are getting set way more than that. Over twice that.
Commands used:
/particle <name> <x> <y> <z> <xd> <yd> <zd> <speed> [count] [player|entity]
/particle happyVillager ~3 ~ ~ 0 0 5 0 500
/particle happyVillager ~3 ~ ~ 0 0 4 0 500
/particle happyVillager ~3 ~ ~ 0 0 3 0 500
/particle happyVillager ~3 ~ ~ 0 0 2 0 500
/particle happyVillager ~3 ~ ~ 0 0 1 0 500