It should work as long as perl type hierarchy is same as C++ types and only single inheritance is used (pointer to derived class instance must be the same as pointer to base class instance). Duplicating the methods is a bit safer, but code duplication is prone to errors.
Forcing xspp to emit the methods for inherited class is probably best choice, but not possible as far as I know.

Using sv_derived_from will have some runtime penalty (probably negligible in XS) and it could cause problems in other places (config:: comes to mind)

Template magic is one possibility - move type checking and conversion to templated function and either specialize it or use traits to tell compiler if sv_isa or sv_derived_from should be used. I'll probably do it anyway - template magic will make it possible to use [x, y] instead of Slicer::Point->new without using from_SV_check explicitly.