I found out, why the code didn't work. I tried to use the dot product to change the probabilities, but that only works in the way I intended if the old direction and the prospective direction are in one plane. I didn't do that projection and so the dot product rarely was negative as the branches grow upwards and the angle between the two directions was mostly smaller than twice the angle the branches have with the trunk.
But even with the fix the result is still not as I would have hoped for. The tree still is showing that asymmetry in the lower part. The problem is, that I first use a probability that a random branch is placed and then decide which one. Only the second operation uses the directional bias. That has the effect, that the first probability (which can't be too big or the tree starts to grow too dense) basically decides over the placement. So I guess I have to turn that around so that the directional bias is used first.