Define
g[t_?NumericQ] := BSplineFunction[pts][t][[1]]
Then,
Minimize[(g[t] - 2.1875)^2, t]
(* {0., {t -> 0.25}} *)
which is the desired result. (NMinimize[(g[t] - 2.1875)^2, t] and FindMinimum[{(g[t] - 2.1875)^2, 0 <= t <= 1}, t] // Chop also give the desired result.)
Why this works while
FindMinimum[(f[t][[1]] - 2.1875)^2, t]
(* {0., {t -> 2.1875}} *)
does not can be seen from the FindMinimum documentation (Details and Options section):
FindMinimum first localizes the values of all variables, then evaluates f with the variables being symbolic, and then repeatedly evaluates the result numerically.
In other words, FindMinimum first converts (f[t][[1]] - 2.1875)^2 to (t - 2.1875)^2 and then minimizes the latter expression. The function g prevents this from happening by blocking symbolic evaluation.
Incidentally, Plot does not first do symbolic evaluation and so does not create this problem. Forcing it to perform symbolic evaluation first yields a curve different from that in the question.
Plot[Evaluate[(f[t][[1]] - 2.1875)^2], {t, 0, 3}]

which does have a minimum at t == 2.1875, as expected.
BSplineFunction[]does not do well when all you need is one component for optimization or root-finding. If need be, you can reconstruct the expression in terms ofBSplineBasis[], as was done here. – J. M.'s missing motivation Aug 13 '16 at 02:41f[t][[1]]evaluates tot, so theFindMinimumexpression in the question really isFindMinimum[(t - 2.1875)^2, t], which is satisfied by{0., {t -> 2.1875}}. – bbgodfrey Aug 13 '16 at 04:43