OK ... if instead of
FindMinimum[dsq[c[t],q],{t,.3,.301}]
we define
f[t_?NumberQ] := dsq[c[t], q];
Then
FindMinimum[f[t], {t, .3,.301}];
works.
I can't say that i understand why it shouldn't work in the original. But I guess
f[t_?NumberQ]
for the function to be minimized avoids all sorts of stuff I don't understand. It just tells FindMinimum "Just do the numbers". ... and we both understand numbers in the same way.