Here's A way to Get your orientation back, it's not super ideal, but it should work, and I want to make sure that it is covered otherwise all else will visually fail.
Here's an example cylinder that I have purposefully put out of plane:
You can tell because when Local orientation is set, the axis do not line up with the object.
To begin to fix this, I add a plane flat in the XY plane, and place it at the origin of the cylinder (for ease this also happens to be the grid center where the 3D cursor is located eg. 0,0,0).
Then with the cylinder selected, I TAB into Edit Mode, and then select just the right hand vertices.
Next, I use the following sequence to get a reference point at the desired center location:
Shift+D -> Alt+M -> At Center
Next, I turn snapping on (Shift+TAB), then set the type by hitting Ctrl+Shift+TAB -> Edge
I then change my view to FRONT (Numpad 1), and change my view type to Ortho (Numpad 5).
Next I rotate the cylinder (R) while holding Ctrl (this temporarily disables snapping), and visually get my right hand center point close to horizontal.
I then swith to top view (Numpad 7), and scale the plane up (S) while holding Ctrl, and getting it visually close to the edge of the cylinder.
Next, I zoom in to the right hand side of the cylinder, and TAB to enter edit mode, then A to select all the vertices.
Then I place my cursor in alignment with about where the reference center point is, and rotate the cylinder (R - I want snapping this time so i DO NOT hold Ctrl), and let the cursor snap to the front edge of the plane.
Finally I return to Object mode by hitting TAB, then immediately I apply the rotation of the cylinder by hitting Ctrl+A -> Rotation
Figure out how to re-orient your Drive-Shaft in Object mode, and Local coordinates should now stick.
Now creating your Driver should work
Now you can do this opposite just as easy, but I'm using the tire as what I'm considering the driving rotation.
1.) Make sure that your driveshaft is selected.
2.) Pop open the properties panel (N).
3.) Right-Click on your desired axis of rotation, and select Add Single Driver (Note this gets slightly more complicated in the latest version of Blender, If you are in 2.78a it's: Add Drivers->Manually Create Later (Single)
4.) Now open the Graph Editor, and Switch its type from F-Curve to Drivers.
5.) Be sure that the Properties Panel is displaying on the right (N), Select the new Driver on the left hand side (eg. 'X Euler Rotation').
6.) now depending on which version you are in there are differences here as well, but on the properties panel, either select the Drivers tab, or scroll down to the Drivers drill down.
7.) There should already be a variable named var, if there is not just click Add Variable & name it var. Then ensure that the channel type is set to Transform Channel, then in the Object field select your Tire Object, and set the following: Type = (in my case) Y Rotation (for your case, just pick whatever axis your wheel is spinning on), and set the Space to Transform Space.
8.) Now in the Expression enter var * 0.25 & Hit Enter.
9.) Go Back to your 3D view and test it by spinning your tire.
DanB writes: Thanks, Rick - I'm accepting this answer, as it led me to the solution. It's a pain to isolate each piece of the drive train (I have probably 9 or 10 pieces), then to locate and rotate them accurately to global 0,0,0 and then to set their local exes, and then to move them back into the model... But it's a process that does work, and achieves wobble-free shaft rotation. Thanks!