Mi alma, mi Reina, angelito, bizcocho, bombón, caramelo, (insert many more sweets here), dulzura, muñeca,
Or by her attributes chaparrita, flaquita, morena...
I also think from this list cannot be missing "Mi vieja". Although they are usually not as receptive with this one many husbands use this one.
Hahah. yeah. Sometimes we think that just by meaning alone we can find the right word but context matters. I've done that, just that insulting friends in English.
Just for the record though 'tonto' is more used in the context of like 'dumb' or 'fool and depending the person might be an okay word to use or not. I also think you dodge a bullet, usually "silly" gets translated as 'necio' which we never really use in a endearing way. Necio is more of an accusation about someone being stubbornly saying or doing silly things. Similar to "headstrong".
Now for silly you could call him 'bobo' it is another way to say dumb. It works in the similar context you'd use for silly. "Claro que no, bobo" (Of course no, silly). You can call him "bobito" to ensure the endearing context if you're using the word on its own. You can actually use 'tonto' this same way, but while soft, without context people,like I think your boyfriend did, might think it is accusatory.