The problem has nothing to do with PIL. The problem is that the background is .png and you compose it and then output it as .jpg.
.png is lossless, very good for synthetic images like your background ..jpg is loss, very good for natural images like photos. When you render your background as .jpg, it will contain compression artifacts of what you call "spots."
Output the final image as .png. It will be more bytes than .jpg, but it will look better.
source share