Hi,
I've noticed that you define how many points the LineRenderer will use when you click (inside StartGrapple())
lr.positionCount = 2;
But...
I'm not sure if this
if (!joint) return;
is really stopping the method if the joint is not existing yet.
I prefer to use something like:
if (joint == null) return;
Or at least, I'm more used to that expression to control if something exists.
Then, if I'm correct, it's possible that the LineRenderer is trying to draw points before the number of points has been defined (RPC_DrawRope is being called every frame in LateUpdate)
I mean, maybe I'm wrong, but it's possible that you are asking to draw the LineRenderer second position and it's possible that LineRenderer still doesn't know how many points it has to draw.
What about trying to setup the LineRenderer in the Awake method? Awake is launched before Updates.
Again, trying to help here, but I'm unable to run your code and I'm debugging just with my eyes :(
Good luck!