well you're using migrate -f... imho, PrependMigrate should always take precedence over using migrate -f :)
it will make sure the payload runs in a clean process, no issues with memory corruption or anything...  and no timing issues either...
Of course, it doesn't explain why meterpreter doesn't work without the additional junk at the end, but that's a different story