Ah, ok. The reason you're getting the PlayerMobile cast to type BaseCreature then is because the !list.Contains(from) is adding the person throwing the potion to the list. This is done with explosion potion so that the thrower will still be damaged if standing too close.
So what you would need to do is, make the foreach only look for each BaseCreature in the list and either IsParagon or !IsParagon depending on which you're wanting that particular potion to use.
foreach (BaseCreature bc in list)
{
if (!bc.IsParagon && !bc.Controlled)
{
IsParagon = true;
from.SendMessage("The effects of the potion turn all of the creatures into paragons.");
}
}
The SpellHelper.AcquireIndirectTargets will add all mobiles to the list with the foreach ensuring it is only BaseCreatures that are not paragon will be affected. If you want pets affected, simple removed the !bc.Controlled to have them turn into paragons as well.
You can remove this code since you do not want the person throwing the potion added to the list for any reason.
if (from != null && damageThrower && !list.Contains(from))
{
list.Add(from);
}