Ok all, I managed to find the answer myself!
Seems that quaternion multiplications work differently then Matrix ones. So I did the combining in matrices then retransformed it. Here is the final content of the UpdateRotation() function:
Code:
Quaternion Yaw;
Quaternion Pitch;
Quaternion Roll;
RelativeVectors["Look"] = Vector3.Transform(AbsoluteVectors["Look"], Matrix.CreateFromQuaternion(CameraRotation));
RelativeVectors["Up"] = Vector3.Transform(AbsoluteVectors["Up"], Matrix.CreateFromQuaternion(CameraRotation));
RelativeVectors["Right"] = Vector3.Transform(AbsoluteVectors["Right"], Matrix.CreateFromQuaternion(CameraRotation));
Yaw = Quaternion.CreateFromAxisAngle(RelativeVectors["Up"], MathHelper.ToRadians(RotationBuffer["Yaw"]));
Pitch = Quaternion.CreateFromAxisAngle(RelativeVectors["Right"], MathHelper.ToRadians(RotationBuffer["Pitch"]));
Roll = Quaternion.CreateFromAxisAngle(RelativeVectors["Look"], MathHelper.ToRadians(RotationBuffer["Roll"]));
Matrix temp = Matrix.CreateFromQuaternion(CameraRotation);
Matrix temp2 = Matrix.CreateFromQuaternion(Yaw * Pitch * Roll);
CameraRotation = Quaternion.CreateFromRotationMatrix(temp * temp2);
StablilizeRotation();