Ok, i see you avoid the case where matrix order could be an issue, because you use only quats and positions.
First make sure about the quaternion numbers ordering in your engine.
Quaternion is similar to axis and angle rotation, three numbers store the axis (x,y,z) and w stores angle.
(That's not really true, but let's ignore those details).
Look for an axis and angle conversation in your quat class, for me this looks like:
__forceinline void FromAxisAndAngle (const qVec3 &axis, const float angle)
{
// memory order is xyzw for me
float rad = angle * 0.5f;
float scale = sinf(rad);
*((qVec3*)this) = axis * scale; // here i cast the quat directly to a vector, from that i know the first 3 numbers are xyz, because the axis vector is also xyz
w = cosf(rad); // here the 'angle' is set and i know it's the 4th number
}
So by looking at this function i could figure out what values store what even if i would not have written this myself, and the numbers would only be named float v[4].
When you're sure about that you need to reflect this here:
S3DX::AIVariables<4> rot = S3DX::object.getRotationQuaternion(hObject, 3DX::object.kGlobalSpace);
dQuaternion rotation(rot[0], rot[1], rot[2], rot[3]);
E.g. with my xyzw order i would need to change it to dQuaternion rotation(rot[1], rot[2], rot[3], rot[0]);
And the same of course any times when reading back a quat from newton.
Because you already tried that all and it still does not work, you most probably use a left handend coordinate system (DirectX) while Newton is right handed like OpenGL (or is it the other way around? Never sure what's left or right

Unfortunately i have no experince with this issue when using quaternions.
With a matrix you would need to negate one row or colum to flip direction,
but with quat it might be different because:
If you negate one axis number, you also need to negate the w number to ensure normalization gives 1 not -1, right?
I'm not sure if it works that way to give the expected rotation.
EDIT: Nonsense - signs are eliminated by squaring
Negate whatever you like

I suggest you create helper functions QuatFromNewton() and QuatToNewton() to ease the trial and error fun.
The rest of the post becomes obsolete because the nonsense above...
And if this does not work with all negation combinations, inside those functions convert the quat to a matrix, flip an axis and convert back to quat before you return.
Be warned that quat / matrix conversion may fail because it assumes correct handness, so use Newtons functions with dQuat and dMatrix, and your stuff with yours.
And also, Newton stores axis in rows, and yours may store them in rows.
Then, when it works it should be possible to figure out how to do this fast.
This has to happen to anybody at least once in life

EDIT: Because handness is only an issue with display, it should really be possible to make it work without any negations.