Q:

Why does this method return a boolean?

Why return bool from SetProperty? It's not used. 
This is from boilerplate code coming out of a Xamarin.Forms template.
It's not used in inherited classes either.

public class BaseViewModel : INotifyPropertyChanged
{
    private bool isBusy = false;
    public bool IsBusy
    {
        get { return isBusy; }
        set { SetProperty(ref isBusy, value); }
    }

    protected bool SetProperty<T>(ref T backingStore,
                                  T value,
                                  [CallerMemberName] string propertyName = "",
                                  Action onChanged = null)
    {
        if (EqualityComparer<T>.Default.Equals (backingStore, value))
            return false;

        backingStore = value;
        onChanged?.Invoke();
        OnPropertyChanged(propertyName);
        return true;
    }

    #region INotifyPropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        var changed = PropertyChanged;
        if (changed == null)
            return;

        changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    #endregion
}

A:

The return value of this SetProperty method indicates if it has effectively changed its underlying backing field.
The IsBusy implementation doesn't use the return value of SetProperty, but in a derived class, which can access this protected SetProperty method, its return value could be used to perform additional specialized tasks.
By the way, I actually didn't expect the BaseViewModel class to have an IsBusy property with a public setter. As it is now, the outside world can determine if a BaseViewModel instance is busy or not. As I see it, that's somewhat strange.

