I got a e28 528i and I had a problem that the odometer would read about 8 to 10 percent less than what the actual real travelled distance was. However the speedometer was reading correct speed.
Upon removing and disassembling the speedometer, I found one of the small gears was missing a tooth.
This gear was very small and is connected to a long shaft running behind the speedo face plate. I found it was hard and brittle, so that is most likely your problem as well, but your probably missing more teeth and its stopped.
I grabbed a speedo from the wreckers and made a great speedo from the two
Hope that helps!