The blueprint asset is UBlueprint while you got UClass in template argument, so you should use UBlueprint instead.
If spawn fails it always output error with reason in output log so check it out (you can find output log in Window->Development Tools->Output Log). If issue above is the things then it should tell you you got nullptr on class.
Potentially StartPlay may also be executed after OnWorldBeginPlay making your function not bind in time. In this case oyu should not get a log. You can double check by putting breakpoint on OnWorldBeginPlay (click space in VS between line number and code text area to place it) and run debugger.
If you plan to use GameMode blueprint anyway with conjunction with C++ i would not reference blueprints in C++ all together and use TSubclassOf UPROPERTYs instead, they a lot safer and should work 100%.