Because all of the errors have the same relative weight. Supplying a weight parameter does not change the actual values you are averaging, it just indicates the weight with which each value value contributes to the average. In other words, after multiplying each value passed by its corresponding weight, np.average divides by the sum of the weights provided.
>>> import numpy as np
>>> np.average([1, 2, 3], weights=[0.2, 0.2, 0.2])
2.0
>>> np.average([1, 2, 3])
2.0
Effectively, the average formula for an n-dimensional array-like container is

where each weight is assumed to be equal to 1 when not provided to numpy.average.
Because all of the errors have the same relative weight. Supplying a weight parameter does not change the actual values you are averaging, it just indicates the weight with which each value value contributes to the average. In other words, after multiplying each value passed by its corresponding weight, np.average divides by the sum of the weights provided.
>>> import numpy as np
>>> np.average([1, 2, 3], weights=[0.2, 0.2, 0.2])
2.0
>>> np.average([1, 2, 3])
2.0
Effectively, the average formula for an n-dimensional array-like container is

where each weight is assumed to be equal to 1 when not provided to numpy.average.
My answer is late, but I hope this will be of use to others looking at this post in the future.
The above answers are spot on with respect to why the results are the same. However, there is a fundamental flaw in how you are calculating your weighted average. The uncertainties in your data ARE NOT the weights that numpy.average expects. You have to calculate your weights first and provide them to numpy.average. This can be done as:
weight = 1/(uncertainty)^2.
(see, for example, this description.)
Therefore, you would calculate your weighted average as:
wts_2e13 = 1./(np.power(bias_error_2e13, 2.)) # Calculate weights using errors
wts_half = 1./(np.power(error_half, 2.)) # Calculate weights using half errors
test = np.average(bias_2e13, weights = wts_2e13)
test_2 = np.average(bias_2e13, weights = wts_half)
giving you the answers of 2.2201767077906709 in both cases for reasons explained well in the above answers.
You can create a 3D array containing your 2D arrays to be averaged, then average along axis=0 using np.mean or np.average (the latter allows for weighted averages):
np.mean( np.array([ old_set, new_set ]), axis=0 )
This averaging scheme can be applied to any (n)-dimensional array, because the created (n+1)-dimensional array will always contain the original arrays to be averaged along its axis=0.
>>> import numpy as np
>>> old_set = [[0, 1], [4, 5]]
>>> new_set = [[2, 7], [0, 1]]
>>> (np.array(old_set) + np.array(new_set)) / 2.0
array([[1., 4.],
[2., 3.]])