Try making any height constraints conditional, ie -7000, or +7000. Once you pass a constraint, if you then do a direct, it cancels the profile associated with the constraint and will try to regain the original profile.
Check the speeds associated with the procedure, if they are too high, it will fly a high rate of descent profile, try inputting the speed you want to be at a certain part of the approach, that usually steadies it down