Redirect entry type to another domain
The reason that you get that odd URL with the {% redirect %} tag is just because there's some whitespace at the beginning of the value returned from your helpers.msuLink() macro. Using the |trim filter (which removes whitespace from both ends of a string) fixes that:

{% redirect helpers.msuLink(entry)|trim %}


If you prefer, you could also modify your macro so it returns the value without whitespace, by using the {% spaceless %} tag – then you don't need the |trim filter:

{% macro msuLink(entry) %}
{% spaceless %}
    {{ 'https://reg.msu.edu/Courses/Request.aspx?SubjectCode=' ~ entry.deptCode ~ '&amp;CourseNumber=' ~ entry.courseNumber ~ '#Results' }}
{% endspaceless %}
{% endmacro %}


As for the conditional, I don't believe you want the craft.entries query there – just put the following at the top of your courses/_entry.html template (note that I'm also putting the {% import %} statement outside the conditional – it doesn't really matter but its cleaner and shouldn't impact performance):

{% import 'partials/_helpers' as helpers %}

{% if entry.type == 'outsideCourse' %}
    {% redirect helpers.msuLink(entry)|trim %}
{% endif %}

{# Rest of template below #}
...


If you decide that having the outsideCourse URLs 404 instead of redirect makes the most sense (I believe it would, and is cleaner, in most cases), the easiest way to achieve that is to put this at the top of your entry template:

{% if entry.type == 'outsideCourse' %}
    {% exit 404 %}
{% endif %}

{# Rest of the template below #}
...