The only difference is (I think, I will check again if it is true), that coroutine.wrap() can actually error when there is some error in coroutine.wrap(), and if there is a error in coroutine.create() it will return a StringValue saying what error there is and not a warning.
And to add onto that; you can call coroutine.wrap() just like a function (coroutineName()) and with coroutine.create() you need to call it with coroutine.resume (coroutine.resume(coroutineNamw()).