Both std::vector and std::string can be constructed from a brace list.  So you have to be more explicit about which function you actually want to call when passing it a brace list.
You can't bind a vector& reference to a brace list.  And you can't bind it to a temporary vector, either.  So the 1st line can't call the vector version of the function.
However, a string object can be constructed from a brace list, and the string version of the function takes a string by value, not by reference.  So, the 1st line can (and does) call the string version of the function, by creating a temporary string from the brace list, and then passing that temporary to the function.
If you want to call the vector version instead, you will have to call it with a pre-existing vector object for the vector& reference to bind to:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int count_chars(vector<char>& word, char character){
    int How_many = 0;
    for(size_t i = 0; i < word.size(); ++i){
        if (word[i] == character){
            ++How_many;
        }
    }
    return How_many;
}
int count_chars(string wordstring, char character){
    int How_many = 0;
    for(size_t i = 0; i < wordstring.length(); ++i){
        if (wordstring[i] == character){
            ++How_many;
        }
    }
    return How_many;
}
int main(){
    vector<char> vec{'t','a','b','t','z'};
    cout << count_chars(vec, 't') << endl;
    cout << count_chars("balcer", 'b');
}
If you don't want to declare a separate variable, then change the vector& reference to const vector& instead (which you should do anyway, since the function is just reading values, not modifying them), and then you can construct a temporary vector object directly in the parameter for it to bind to (as a const reference can bind to a temporary):
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int count_chars(const vector<char>& word, char character){
    int How_many = 0;
    for(size_t i = 0; i < word.size(); ++i){
        if (word[i] == character){
            ++How_many;
        }
    }
    return How_many;
}
int count_chars(const string &wordstring, char character){
    int How_many = 0;
    for(int i = 0; i < wordstring.length(); ++i){
        if (wordstring[i] == character){
            ++How_many;
        }
    }
    return How_many;
}
int main(){
    cout << count_chars(vector<char>{'t','a','b','t','z'}, 't') << endl;
    cout << count_chars("balcer", 'b');
}
And just FYI, both of your functions are redundant, as the standard library has a std::count() algorithm for counting the number of occurrences of a given value in a range of values, such as vectors and strings.