I'm not saying UE4 isn't good, but I have a pretty long list of complaints.
First, their class reference documentation is very poor. The majority of classes and functions have either no description, or a description that basically repeats the function name in sentence form. For example, http://api.unrealengine.com/INT/API/Runtime/CoreUObject/UObj....
UE4 is fairly opinionated about what kind of game you're making. A lot of its core classes, like AActor, AGameMode, etc. are designed with a multiplayer fps in mind. For example, the basic actor class is much heavier than Unity's GameObjects. Every actor gets things like a built-in PointDamage and RadialDamage event so they can be damaged by guns and grenades.
There's a lot of minor issues with API/naming choices. ConvertTransformToRelative() has the Transform and ParentTransforms parameters backwards and instead gives you the ParentTransform relative to Transform. FBox.IsInside() should be named FBox.Contains(). As it stands, "if (MyActorBounds.IsInside(MyContainer)) { }" does the exact opposite of what you'd expect. The sin() and cos() nodes in materials don't take radians, nor degrees by default, but revolutions (so sin(0) == sin(1) == sin(2) == 0), even though the C++ FMath::Sin() function takes radians.
More importantly, we encounter engine bugs and crashes pretty frequently. Just recently, I was unlucky enough to encounter 3 separate bugs with OnAudioPlaybackPercent (it returns wrong values in various circumstances). Atmospheric fog started whiting out the screen after updating engine versions (still investigating this one). We've had tons of issues with child actors either becoming corrupt or losing their default values. I think we encounter some engine issue every week.
My favorite was when deleting a question mark from a comment in C++ caused everyone to be unable to compile. That had us scratching our heads. Any guesses why that would happen? (Hint: it's Unreal's fault.)
"Delete binaries and intermediate folders and recompile" is practically our unofficial office motto due to how often it fixes issues. Which leads me to, compiling C++ is slow. The near instant compile times of Unity are like a breath of fresh air.
Finally, the community and Asset Store for Unity seem much better. I wish we had something like FinalIK for Unreal. The Asset Store has 10x more content than the UE4 Marketplace. We usually look on the Asset Store for stuff like sounds or meshes, but it can be inconvenient, especially if they come with custom materials or code.