@normen, thanks for the prompt reply, as per usual!
@SomethingNew thanks, you were spot on with the Quaterion being the problem. (I compiled this reply before seeing your post)
Anyway... gathered more data, outputting the rotations for all the nodes from the mountpoint upto the PhysicsCharacterNode:
PhysicsSpace.update()
PhysicsGhostNode - setWorldRotation: [x=0.0 y=0.0 z=0.0 w=0.5]
Mountpoint: [x=-1.4901161E-7 y=-0.99999887 z=-5.811453E-7 w=-6.2584877E-7] [x=0.49089 y=0.553379 z=0.446544 w=0.503386]
Mountpoint parent: [x=0.44654325 y=-0.5033847 z=-0.49088922 w=-0.5533788] [x=0.018487 y=-0.015465 z=-0.001465 w=0.999708]
Mountpoint parent +2: [x=0.46349767 y=-0.50337523 z=-0.49395728 w=-0.53645843] [x=0.048764 y=-0.727602 z=0.045756 w=0.682732]
Mountpoint parent +3: [x=0.7250419 y=-0.6887041 z=9.99996E-7 w=-2.791E-9] [x=0.723117 y=-0.690725 z=1.0E-6 w=0.0]
Mountpoint parent +4: [x=0.0 y=0.0 z=0.002791 w=0.999996] [x=0.0 y=0.0 z=0.002791 w=0.999996]
Mountpoint parent +5: [x=0.0 y=0.0 z=0.0 w=1.0] [x=0.0 y=0.0 z=0.0 w=1.0]
Mountpoint parent +6: [x=0.0 y=0.0 z=0.0 w=1.0] [x=0.0 y=0.0 z=0.0 w=1.0]
Mountpoint parent +7: [x=0.0 y=0.0 z=0.0 w=1.0] [x=0.0 y=0.0 z=0.0 w=0.5]
Mountpoint parent +7 class: class com.jmex.jbullet.nodes.PhysicsCharacterNode
PhysicsSpace.update()
PhysicsGhostNode - setWorldRotation: [x=0.0 y=0.0 z=0.0 w=0.5]
Mountpoint: [x=-7.4505806E-8 y=-0.49999943 z=-2.9057264E-7 w=-3.1292439E-7] [x=0.49089 y=0.553379 z=0.446544 w=0.503386]
Mountpoint parent: [x=0.22327162 y=-0.25169235 z=-0.24544461 w=-0.2766894] [x=0.018487 y=-0.015465 z=-0.001465 w=0.999708]
Mountpoint parent +2: [x=0.23174883 y=-0.25168762 z=-0.24697864 w=-0.26822922] [x=0.048764 y=-0.727602 z=0.045756 w=0.682732]
Mountpoint parent +3: [x=0.36252096 y=-0.34435204 z=4.99998E-7 w=-1.3955E-9] [x=0.723117 y=-0.690725 z=1.0E-6 w=0.0]
Mountpoint parent +4: [x=0.0 y=0.0 z=0.0013955 w=0.499998] [x=0.0 y=0.0 z=0.002791 w=0.999996]
Mountpoint parent +5: [x=0.0 y=0.0 z=0.0 w=0.5] [x=0.0 y=0.0 z=0.0 w=1.0]
Mountpoint parent +6: [x=0.0 y=0.0 z=0.0 w=0.5] [x=0.0 y=0.0 z=0.0 w=1.0]
Mountpoint parent +7: [x=0.0 y=0.0 z=0.0 w=0.5] [x=0.0 y=0.0 z=0.0 w=0.5]
Mountpoint parent +7 class: class com.jmex.jbullet.nodes.PhysicsCharacterNode
Although I'm not great with Quaterions, it does look like the problem is caused by the w value going from 1.0 to 0.5.
The localRotation of the PhysicsCharacterNode in the first PhysicsSpace.update() chages to 0.5, which is then propagated to the WorldRotation on the subsequent update, affecting the child nodes.
I tried removing rotation applied by commenting out the setWorldRotation() in PhysicsGhostNode on my local copy of bullet-jme ...and it worked! Everything was positioned where it should be

I checked out the TestPhysicsCharacter from the jbullet-jme tests and that does the same thing, the WorldRotation for the PhysicsCharacterNode is [0, 0, 0, 0.5].
The problem I'm experiencing will only be encountered when there are children that have rotations.
SummaryThe cause is the 0.5 'w' value in the given Quaterion rotation for setWorldRotation() in PhysicsGhostNode.
The identity for a Quaterion would be [0,0,0,1], with: w == 1.
Ending Question From a performance viewpoint, as PhysicsCharacterNode is not to be rotated, then why apply a rotation at all?
Basically every update a Quaterion multiplcation is applied to the PhysicsCharacterNode where the goal is to achieve no rotation – then where is the need to apply the rotation? Why not have an empty method and save cycles from not executing those operations? (i.e. by overriding setWorldRotation() in PhysicsCharacterNode with an empty method)
Thanks
Chris
NBCould you add a constructor to PhysicsCharacterNode that accepts a CollisionShape, like that of PhysicsNode
public PhysicsCharacterNode( Spatial spat, CollisionShape shape, float stepHeight )