If I have a 58% chance of winning a point, what's the chance of me winning a ping pong game to 21, win by 2? I have a bet with a co-worker that out of 50 ping pong games (first to win 21 points, win by 2), I will win all 50. So far we've played 15 games and on average I win 58% of the points, plus I've won all the games so far. So we're wondering if I have a 58% chance of winning a point and he has a 42% chance of winning a point, what's the percent chance that I would win the game? Is there a formula that we can plug in difference % chances?
We've googled all over and even asked the data scientists at our company but couldn't find a straight answer.
Edit: Wow, I am blown away by the thoroughness of responses. Thank you all so much!!!
In case people are curious, I have an update to how my bet is going: I've now won 18 out of 50 games, so I need to win 32 more games. I've won 58.7% of all points and my opponent has therefore won 41.3% of points. The standard deviation for my opponent is 3.52, his average score is 14.83, and his median score is 15.50. Below is a screenshot of the score of each game so far. I can keep updating as the bet goes on, if people are interested.
Edit #2: Unfortunately we've only been able to play a few more games, below are the results. I'm just going to keep replacing the picture so I don't have a bunch of screenshots of the score.
Final Update: I finally lost to my co-worker on game #28. He beat me 21-13. Thanks for all of your help!

 A: Based on simulation, it looks like the probability of winning any given game is about 85.5%. 
The probability of winning by exactly 2 (which is how I read the title, but doesn't seem to be what you're asking) is about 10.1%. 
Run the code below. 
set.seed(328409)
sim.game <- function(p)
{
 x1 = 0 
 x2 = 0 
 while( (max(c(x1,x2)) < 21) | abs(x1-x2)<2  ) 
 {
   if(runif(1) < p) x1 = x1 + 1 else x2 = x2 + 1 
 }
 return( c(x1,x2) ) 
}

S <- matrix(0, 1e5, 2)
for(k in 1:1e5) S[k,] <- sim.game(0.58)

mean( (S[,1]-S[,2]) == 2 ) #chance of winning by 2
mean(S[,1]>S[,2]) #chance of winning

A: Using the binomial distribution and assuming every point is independent:


*

*The probability the $58\%$ player gets to $21$ in the first $40$ points (taking account of the fact the last point must be won) is $\sum_{n=21}^{40} {n-1 \choose 20} 0.58^{21}0.42^{n-21}$ $=\sum_{k=21}^{40} {40 \choose k} 0.58^{k}0.42^{40-k}$ $\approx 0.80695$

*The probability $58\%$ player gets $20$ from $40$ points played is the binomial ${40 \choose 20} 0.58^{20}0.42^{20} \approx 0.074635$.  Conditioned on that, the probability the $58\%$ player then wins with the two point margin is $\frac{0.58^2}{0.58^2+0.42^2}\approx 0.656006$ 
So the overall probability the $58\%$ player wins is about $0.80695+0.074635\times 0.656006$ $\approx  0.8559$
The probability of the $58\%$ player winning the first $15$ games is then about $0.85559^{15} \approx 0.0969$ which is fairly unlikely.  The probability of the $58\%$ player winning the final $35$ games is about $0.85559^{35} \approx 0.0043$ which is very unlikely.    
A: I went with a computational answer. Here is an R function that simulates a ping-pong game where the winner has to win by 2. The only argument is the probability that you win a point. It will return the final score of that game:
## data simulation function ----------------------------------------------------
sim_game <- function(pt_chance) {
  them <- 0
  you <- 0
  while (sum((them < 21 & you < 21), abs(them - you) < 2) > 0) {
    if (rbinom(1, 1, pt_chance) == 1) {
      you <- you + 1
      them <- them + 0
    } else {
      you <- you + 0
      them <- them + 1
    }
  }
  return(list(them = them, you = you))
}

Let's first make sure it works by simulating 10,000 games where you have a 50% chance of winning each point. We should observe that your win percentage is about 50%:
## testing 10,000 games --------------------------------------------------------
set.seed(1839)
results <- lapply(1:10000, function(x) sim_game(.5))
results <- as.data.frame(do.call(rbind, results))
results$you_win <- unlist(results$you) > unlist(results$them)
mean(results$you_win)

This returns .4955, about what we would expect. So let's plug in your 58%:
## simulate 10,000 games -------------------------------------------------------
set.seed(1839)
results <- lapply(1:10000, function(x) sim_game(.58))
results <- as.data.frame(do.call(rbind, results))
results$you_win <- unlist(results$you) > unlist(results$them)
mean(results$you_win)

This returns .8606. So you have about an 86.06% chance of winning one game.
We can now simulate across 35 game batches and see how many times you would win all 35:
## how often do you win all 35? ------------------------------------------------
set.seed(1839)
won_all_35 <- c()
for (i in 1:10000) {
  results <- lapply(1:35, function(x) sim_game(.58))
  results <- as.data.frame(do.call(rbind, results))
  results$you_win <- unlist(results$you) > unlist(results$them)
  won_all_35[i] <- mean(results$you_win) == 1
}
mean(won_all_35)

This returns .0037, which means you have about a 0.37% chance of winning the next 35 games. This assumes that all games and all points are independent of one another. You could program that explicitly into the function above, if you wanted to.
Note: I'm doing this on the fly. I'm sure there is a more computationally efficient way of programming this.
A: Should we assume that the 58% chance of winning is fixed and that points are independent?
I believe that Whuber's answer is a good one, and beautifully written and explained, when the consideration is that every point is independent from the next one. However I believe that, in practice it is only an interesting starting point (theoretic/idealized). I imagine that in reality the points are not independent from each other, and this might make it more or less likely that your co-worker opponent gets to a win at least once out of 50. 
At first I imagined that the dependence of the points would be a random process, ie not controlled by the players (e.g. when one is winning or loosing playing differently), and this should create a greater dispersion of the results benefiting the lesser player to get this one point out of fifty.  
A second thought however might suggest the opposite: The fact that you already "achieved" something with a 9.7% of chance may give some (but only slight) benefit, from a Bayesian point of view, to ideas about favouring mechanisms that get you to win more than 85% probability to win a game (or at least make it less likely that your opponent has a much higher probability than 15% as argued in the previous two paragraphs). For instance, it could be that you score better when your position is less good (it is not strange for people scoring much more different on match points, in favor or against, than on regular points). You can improve estimates of the 85% by taking these dynamics into account and possibly you have more than 85% probability to win a game.
Anyway, it might be very wrong to use this simple points statistic to provide an answer. Yes you can do it, but it won't be right since the premises (independency of points) are not necessarily correct and highly influence the answer. The 42/58 statistic is more information but we do not know very well how to use it (the correctness of the model) and using the information might provide answers with high precision that it actually does not have.

Example
Example: an equally reasonable model with a completely different result
So the hypothetical question (assuming independent points and known, theoretical, probabilities for these points) is in itself interesting and can be answered, But just to be annoying and skeptical/cynical; an answer to the hypothetical case does not relate that much to your underlying/original problem, and might be why the statisticians/data-scientists at your company are reluctant to provide a straight answer.
Just to give an alternative example (not neccesarily better) that provides a confusing (counter-) statement 'Q: what is the probability to win all of the total of 50 games if I already won 15?' If we do not start to think that 'the point scores 42/58 are relevant or give us better predictions' then we would start to make predictions of your probability to win the game and predictions to win another 35 games solely based on your previously won 15 games:


*

*with a Bayesian technique for your probability to win a game this would mean: $p(\text{win another 35 | after already 15}) = \frac{\int_0^1 f(p) p^{50}}{\int_0^1 f(p) p^{15}}$ which is roughly 31% for a uniform prior f(x) = 1, although that might be a bit too optimistic. But still if you consider a beta distribution with $\beta=\alpha$ between 1 and 5 then you get to:



which means that I would not be so pessimistic as the straightforward 0.432% prediction The  fact that you already won 15 games should elevate the probability that you win the next 35 games. 

Note based on the new data
Based on your data for the 18 games I tried fitting a beta-binomial model. Varying $\alpha=\mu\nu$ and $\beta=(1-\mu)\nu$ and calculating the probabilities to get to a score i,21 (via i,20) or a score 20,20 and then sum their logs to a log-likelihood score.
It shows that a very high $\nu$ parameter (little dispersion in the underlying beta distribution) has a higher likelihood and thus there is probably little over-dispersion. That means that the data does not suggest that it is better to use a variable parameter for your probability of winning a point, instead of your fixed 58% chance of winning. This new data is providing extra support for Whuber's analysis, which assumes scores based on a binomial distribution. But of course, this still assumes that the model is static and also that you and your co-worker behave according to a random model (in which every game and point are independent).
Maximum likelihood estimation for parameters of beta distribution in place of fixed 58% winning chance:

Q:  how do I read the "LogLikelihood for parameters mu and nu" graph?A: Much effort could be spent on a perfect model.  But sometimes a bad model is better.  And nothing says bad model like the central limit theorem -- everything is a normal curve.
We'll ignore "overtime".  We'll model the sum of individual points as a normal curve.  We'll model playing 38 rounds and whomever has the most points win, instead of first to 20.  This is quite similar game wise!
And, blindly, I'll claim we get close to the right answer.
Let $X$ be the distribution of a point.  $X$ has value 1 when you get a point, and 0 when you don't.
So $E(X)$ =~ $0.58$ and $Var(X)$ = $E(X)*(1-E(X))$ =~ $0.24$.
If $X_i$ are independent points, then $\sum_{i=1}^{38}{X_i}$ is the points you get after playing 38 rounds.
$E(\sum_{i=1}^{38}{X_i})$ = $38*E(X)$ =~ $22.04$
$Var(\sum_{i=1}^{38}{X_i})$ = 38*Var($X$) =~ $9.12$
and $SD(\sum_{i=1}^{38}{X_i})$ = $\sqrt{38*Var(X))}$ =~ $3.02$
In our crude model, we lose if $\sum_{i=1}^{38}{X_i} < 19$ and win if $\sum_{i=1}^{38}{X_i} > 19$.
$\frac{22.04-19}{3.02}$ is $1.01$ standard deviations away from the mean, which works out to a $15.62\%$ chance of failure after consulting a z score chart.
If we compare to the more rigorous answers, this is about $1\%$ off the correct value.
You'd generally be better off examining the reliability of the $58\%$ victory chance rather than a more rigorous model that assumes $58\%$ chance and models it perfectly.
