here that explains some of the issues around this. Yes, you are right in saying that the JMP ESP address needs to be changed, as Service Pack 3 provides a new version of shell32.dll which is obviously structured differently from the one provided with SP2. Since we use a hard coded address for that JMP ESP instruction the address needs to change when the module changes.
There are a number of reasons why the shellcode might be different. Newer releases of Metasploit sometimes contain slightly modified versions of shellcode, different parameters fed to msfpayload will modify the shellcode generated and the shikata_ga_nai encoder in msfencode can produce different encoded output on subsequent runs. Differences in the shellcode are not overly important as long as it does what you need it to however.