Almost certainly a clock issue.
Do you have a low-capacitance active probe? They're invaluable in situations like this.
If it works when loading the clock with a ~10pF passive probe, then this says your source impedance doesn't match the load. Are the pins internally terminated in the PHY? Most likely the problem is overshoot and bounce due to insufficient source impedance; when you add a 10pF load the rise time is reduced and you get less overshoot, and this is enough to make it work. Are you sure it's 50Ω and not 100Ω? 50Ω seems low.
Not familiar with the ESP32 MAC, but it's also possible it's a problem with data signalling, and the MAC is suppressing frames with CRC errors.