This is a confusing thread...the title is "stain vs dye", then poster leads with "vs epoxy"...
So, just to be clear, I want you to understand that stains and dyes are a coloring method and that's all. Concrete stains come in many forms, such as acid stains, water based stains and acetone dyes. Acids and water based are usually UV resistant but dyes are generally not.
These coloring methods must be sealed with either an acrylic or epoxy. Without them the color will not show and or last. In some cases people think the stain is faded but it's generally in need of resealing.
In a garage setting, 2 things regarding a stain and seal job, IMO...
Acid stain will not work because during the concrete grinding process, the cream is that causes the great reaction will removed.
Second, a garage needs a good stain resistant sealer that can manage salts as well as hot tires.
In garages, we typically use UV resistant acetone dyes with an epoxy - polyaspartic finish. Similar to this: