Ошибка в том, что вы переопределяете class TSin
. Я не думаю, что вы можете сделать это.
То, что вы можете сделать, это объявить универсальный шаблон и специализировать определения класса:
template <class Object, class Var, class Invert, class Step = Var,
unsigned int FIXED = IW_GEOM_POINT>
class TSin;
template <class Object>
class TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT> {...
или специализируйте определения членов класса:
template <class Object>
void TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT>::Foo(...) {...
или объявить подкласс:
template <class Object, class Var, class Invert, class Step = Var,
unsigned int FIXED = IW_GEOM_POINT>
class TSin : public BasicTween<Object, Var> {...
template <class Object>
class SpecialTSin::public TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT>
{...
Я думаю, что последний вариант является лучшим.