The API docs state
Memory data providerType (memory)
The memory data provider is used to construct in memory data, for
example scratch data or data generated from spatial operations such as
contouring. There is no inherent persistent storage of the data. The
data source uri is constructed. The url specifies the geometry type
("point", "linestring", "polygon",
"multipoint","multilinestring","multipolygon"), optionally followed by
url parameters as follows:
crs=definition Defines the coordinate reference system to use for the
layer. definition is any string accepted by
that the layer will be constructed with a spatial index
field=name:type(length,precision) Defines an attribute of the layer.
Multiple field parameters can be added to the data provider
definition. type is one of "integer", "double", "string".
An example url is "Point?crs=epsg:4326&field=id:integer&field=name:string(20)&index=yes"
So I guess it's
crs = votherpoly.crs().toWkt() # could also use .authid() instead of .toWkt()
vpoi = QgsVectorLayer("Point?crs=" + crs, "vectpoi", "memory")
feature = QgsFeature()
provider = vpoly.dataProvider()