@SF.'s answer checks out very nicely! xSF=xOP and zSF = zOP.
I used some equations from this answer.
I am not sure if it answers the OP's question completely, but since it checks out mathematically, I'll award this particular bounty.
As Meatloaf says, everything works if you let it.



def deriv(X, t):
x, v = X.reshape(2, -1)
acc = -x * mu * ((x**2).sum())**-1.5
return np.hstack((v, acc))
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint
from scipy.integrate import cumtrapz as CTrapz
# https://space.stackexchange.com/questions/31032/what-exactly-means-universal-variable-x-and-z
halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)]
mu = 1.0
a = 1.0
peri = 0.5
apo = 2.*a - peri
vperi = np.sqrt(mu*(2./peri - 1./a))
vapo = np.sqrt(mu*(2./apo - 1./a))
X0 = np.array([peri, 0, 0, vperi])
time = np.linspace(0, twopi, 201)
answer, info = ODEint(deriv, X0, time, full_output=True)
x, y, vx, vy = answer.T
theta = np.arctan2(y, x)
half_theta = 0.5 * theta
r = np.sqrt(x**2 + y**2)
xdot = np.sqrt(mu)/r
xOP = CTrapz(xdot, time, initial=0)
zOP = xOP**2/a
# https://space.stackexchange.com/questions/27602/what-is-hyperbolic-eccentric-anomaly-f/27604#27604
ecc = (apo-peri)/(apo+peri)
term = np.sqrt((1. - ecc)/(1. + ecc))
tanEover2 = term * np.tan(half_theta)
E = 2. * np.arctan(tanEover2)
E0 = E[0]
E[E<0] += twopi # keep it positive
xSF = np.sqrt(a)*(E - E0)
zSF = (E - E0)**2
things = ( r, theta, xOP, zOP, xdot, E, xSF, zSF )
names = ('r', 'theta', 'xOP', 'zOP', 'xdot', 'E', 'xSF', 'zSF')
if True:
plt.figure()
for i, (thing, name) in enumerate(zip(things, names)):
plt.subplot(2, 4, i+1)
plt.plot(time, thing)
plt.title(name, fontsize=16)
plt.show()
if True:
plt.figure()
plt.subplot(1, 2, 1)
plt.title('x and xSF versus time')
plt.plot(time, xOP, '-r', linewidth=4)
plt.plot(time, xSF, '--k', linewidth=2)
plt.subplot(1, 2, 2)
plt.title('z and zSF versus time')
plt.plot(time, zOP, '-r', linewidth=4)
plt.plot(time, zSF, '--k', linewidth=2)
plt.show()
if True:
x, y, vx, vy = answer.T
plt.subplot(1, 2, 1)
plt.title('y versus x')
plt.plot(x, y)
plt.plot([0], [0], 'ok')
plt.subplot(2, 2, 2)
plt.title('x and y versus time')
plt.plot(time, x)
plt.plot(time, y)
plt.subplot(2, 2, 4)
plt.title('vx and vy versus time')
plt.plot(time, vx)
plt.plot(time, vy)
plt.show()