So `DiscretizeGraphics` seems to always miss the first or last point of a `BSplineCurve` (it seems to do it with a `BezierCurve` as well). Here's the simplest example of this,
pts = {{.5, 0}, {1, 0}, {1, 1}, {.5, 1}, {0, 1}, {0, 0}, {.5, 0}};
GraphicsRow[{Graphics@#, DiscretizeGraphics@#} &@BSplineCurve[pts],
ImageSize -> 600]
[![enter image description here][1]][1]
Why does it do this? Not sure, hopefully one of the kernel developers that hang around here can chime in. It seems at first to be related to [this problem](https://mathematica.stackexchange.com/a/98162/9490) with discretizing Bezier curves, but there you have the problem that `BezierFunction` is awful. Here we have a workaround, because `BSplineFunction` works just fine.
Just extract the points from the curve, create a `Line` object from them, and discretize that. Inspiration came from [this answer](http://stackoverflow.com/a/28860072/4712538) over on stackoverflow,
discretizableBSplineCurve[pts_, opts : OptionsPattern[]] :=
Line@(BSplineFunction[pts,
Evaluate[FilterRules[{opts}, Options[BSplineCurve]]]] /@
Range[0, 1, .01])
Trying it on the above case,
GraphicsRow[{Graphics@#, DiscretizeGraphics@#} &@
discretizableBSplineCurve[pts], ImageSize -> 600]
[![enter image description here][2]][2]
Here it is applied to puzzle piece M.R. is drawing,
p1 = {discretizableBSplineCurve[{{0.1288208346384372`,
0.24716061799090383`}, {0.18307091717113483`,
0.29633799186027077`}, {0.18104183370580254`,
0.25496700929944494`}, {0.22444189973196066`,
0.2943089083949385`}, {0.18307091717113483`,
0.29633799186027077`}, {0.23732099970383244`,
0.34551536572963765`}},
SplineWeights -> {1, 15, 25, 25, 15, 1}],
discretizableBSplineCurve[{{0.1288208346384372`,
0.47866942629949966`}, {0.18307091717113483`,
0.41209239601456865`}, {0.13474007204408336`,
0.417023175115462`}, {0.17814013807024148`,
0.3637615508875172`}, {0.18307091717113483`,
0.41209239601456865`}, {0.23732099970383244`,
0.34551536572963765`}},
SplineWeights -> {1, 15, 25, 25, 15, 1}],
Line[{{0.1288208346384372`,
0.24716061799090383`}, {0.1288208346384372`,
0.47866942629949966`}}]};
{Graphics@p1, DiscretizeGraphics[p1]}
[![enter image description here][3]][3]
Another way to do it would be to modify 'DiscretGraphics`, that way you can work with objects that still have the head `BSplineCurve`.
discretizeGraphics2[graphics_] :=
DiscretizeGraphics@(graphics /. {BSplineCurve[
a__] :> (Line@(BSplineFunction[a] /@ Range[0, 1, .01]))});
Trying this on `p` as defined in the OP,
{DiscretizeGraphics@p, discretizeGraphics2@p}
[![enter image description here][4]][4]
**Edit** So I'm looking at that last picture and thinking that they don't look identical, and wondering if my strategy of converting to a line first messes up the graphic. But when compared to the original, un-discretized version, my system produces a much more faithful reproduction when pre-converting the curve:
GraphicsRow[{Show[{Graphics@p, DiscretizeGraphics@p}],
Show[{Graphics@p, discretizeGraphics2@p}]}]
[![enter image description here][5]][5]
And I can't seem to improve the plot on the left with any combination of options to `DiscretizeGraphics` (`AccuracyGoal`, `PerformanceGoal`, `PrecisionGoal`, or `MeshQualityGoal`). It must be possible, as M.R.'s DiscretizeGraphics in his example image looks much better than mine. I'm using version 10.2, perhaps it has been improved in version 10.3?
**Edit2** Following J.M.'s suggestion, I've worked up a version that uses `ParametricPlot` to adaptively sample the `BSplineFunction`. It seems to be an order of magnitude slower (not that it is all that slow), and ends up plotting many more points, but it could lead to a more faithful reproduction of the original `BSplineCurve` objects,
discretizeGraphics2b[graphics_] :=
DiscretizeGraphics@(graphics /. {BSplineCurve[
a__] :> (Line@(Cases[
ParametricPlot[BSplineFunction[a][t], {t, 0, 1}],
Line[{x__}] :> x, \[Infinity]]))});
{discretizeGraphics2@p,
discretizeGraphics2b@p}
[![enter image description here][6]][6]
[1]: https://i.sstatic.net/6tnIb.png
[2]: https://i.sstatic.net/WM15g.png
[3]: https://i.sstatic.net/FsZiO.png
[4]: https://i.sstatic.net/SCLD6.png
[5]: https://i.sstatic.net/XZhdE.png
[6]: https://i.sstatic.net/H3PbW.png