It's not the shell
None of the answers so far has touched on the real problem. It would be helpful to explain why it does not work as you expect.
grep -i "^**" test.out
Because you have quoted the pattern to grep,
* is not expanded by the shell. It is passed to grep as-is. This is explained in the manual page for bash:
Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of $, `, \, and, when history expansion is enabled, !.
It's regular ordinary regular expressions
A regular expression is a pattern that describes a set of strings.
* is one of the key patterns in regular expressions. By default, grep interprets it as follows:
* The preceding item will be matched zero or more times.
This means that your pattern as it stands,
^** does not make much sense. Possibly it tries to match the beginning of the line zero or more times, twice. Whatever that means.
The solution is to quote it:
Any meta-character with special meaning may be quoted by preceding it with a backslash.
grep -i "^\*\*" test.out
 I do not recommend reading it. Please use
man dash or similar instead.
 No shell was given, so I assume bash.