In a large soup pot put 4 Tablespoons butter and heat over medium-low heat. When the butter has melted, add the onion and celery, and cook about 30 minutes, stirring every 5 minutes or so. You can cook this faster by rising the temperature, but I find that soups turn out better if you don't rush them.
Once the the onion and celery are very tender, add the canned mushrooms, along with their liquid. Cook until the liquid evaporates. Add 1/2 cup flour and cook 2 more minutes so that the flour can loose its raw taste.
Put the ingredients into a food processor along with about 1 cup water and puree, adding more water if the mixture is too thick. Set aside.
In the same soup pot put the rest of the butter (4 Tablespoons) and the sliced fresh mushrooms. Cook over medium heat until the liquid evaporates and the mushrooms have started to lightly brown.
Add the pureed ingredients, and the chicken broth and bring the mixture to a low boil. Boil for 2-3 minutes. If the soup is too runny, add a bit more flour or cornstarch (mixed in water). If it is too thick, add more chicken broth (or water if you want a vegetarian soup).
Remove from heat and let the soup cool for about 3 minutes. Add the cream, and garlic powder, salt and black ground pepper to taste. Mix well. More or less cream can be added, depending on how creamy you want the soup (or how many calories you want to add).